Ich wurde damit beauftragt, ein existierendes (großes) node.js-Web mit mongoose
zu modifizieren.Ist implizit implizit und wie viele Ebenen kann es gehen?
Das Schema hat eine Question
die zu einem Array von Answer
verknüpft wie folgt:
var QuestionSchema = mongoose.Schema({
text: { type: String },
...
answers: [{type: mongoose.Schema.Types.ObjectId, ref: 'Answer'}],
...
});
var AnswerSchema = mongoose.Schema({
text: { type: String },
....
question: {
type: mongoose.Schema.ObjectId,
ref: Question
},
...
});
var Question = mongoose.model('Story', QuestionSchema);
var Answer = mongoose.model('Answer', AnswerSchema);
I keine Instanz der populate
Methode in dem Code verwendet wird, lokalisieren können, aber eine Abfrage eines Dokuments Question
immer mit dem Array voller answer
Objekte zurück, nicht nur die Objekt-ID. Das ist was benötigt wird.
Ich muss jetzt ein Array von reaction
Objekte zu answer
hinzufügen. Früher habe ich die folgenden:
var Answer = mongoose.model('Answer', AnswerSchema);
var ReactionSchema = mongoose.Schema({
text: { type: String },
....
answer: {
type: mongoose.Schema.ObjectId,
ref: Answer,
//required: true
},
...
});
ich dann folgendes zum Answer
Schema hinzugefügt:
reactions: [{type: mongoose.Schema.Types.ObjectId, ref: 'Reaction'}]
//where var Reaction = mongoose.model('Reaction', ReactionSchema);
Ich bin in der Lage reaction
Objekte zu speichern, und wenn ich die Datenbankinhalte von answer
inspiziert, die reaction
Objekte sind in Art und Form gleich answer
Objekte in question
.
Wenn jedoch ein question
Dokument zurückgegeben wird, jedes Element von answer.reaction
enthält nur die Objekt-ID von reaction
anstelle des vollständigen reaction
Objekts. Was habe ich weggelassen oder wie mache ich die Abfrage, um den Join basierend auf dem ref
Typ durchzuführen?
Die Mongodb-Version ist 3.2.9, und Mungo ist 4.0.4.
Dank. Ihre Antwort gab mir den Schlüssel zur Lösung des Problems. Meine Version von Mongo hat überhaupt keine Populate-Methode. Ich verbrachte mehr Zeit damit, in den vorhandenen Code zu graben und fand schließlich den Code, der die "Antwort" -Objekte von den Objekt-IDs, die in "Frage.Antworten" gespeichert waren, manuell abrief und sie dann dem Fragendokument hinzufügte, das zurückgegeben wurde. –