var mongoose = require("mongoose"),
Schema = mongoose.Schema,
ObjectId = Schema.ObjectId;
var Group = new Schema({
name: { type: String, required: true },
members: [{ type: ObjectId, ref: "User" }],
leader: { type: ObjectId, ref: "User" },
// more fields to filter by
});
Group.method("role", function (user) {
if (this.leader === user) return "Leader";
else if (this.members.indexOf(user) >= 0) return "Member";
else return "Non-Member";
});
Jestem początkującym Mongoose i moje pierwsze prawdziwe zapytanie było trudne. Muszę wybrać zestaw grup, nazwę grupy wyświetlanej i rolę bieżącego użytkownika (identyfikator użytkownika jest przechowywany w zmiennej sesji).
Czy mogę użyć metody „rola” w zapytaniu Mongoose select?
Być może powinienem użyć niestandardowego strumienia węzłów i tam zaimplementować metodę roli?
Jestem pewien, że moje warunki (this.leader === użytkownik) lub (this.members.indexOf (użytkownik)> = 0) są poprawne lub wydajne. Muszę unikać ładowania obiektu użytkownika dla każdego dokumentu grupy.
Potrzebny przykład kodu.
Dzięki za pomoc!
Odpowiedzi:
0 dla odpowiedzi № 1chcesz użyć struktury agregacji
http://docs.mongodb.org/manual/applications/aggregation/
Może być konieczne zanurzenie się w natywnym sterowniku dla tego zapytania.