Mungo finden Sie ein Dokument mit der Referenz-Eigenschaft
Habe ich ein erstes Modell Person:
var personSchema = new Schema({
firstname: String,
name: String
});
module.exports = mongoose.model('Person', personSchema);
Und eine zweite Modell-Paar:
var coupleSchema = new Schema({
person1: [{ type: Schema.Types.ObjectId, ref: 'Person' }],
person2: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});
module.exports = mongoose.model('Couple', coupleSchema);
Finde ich ein paar mit einer person ObjectId:
Couple.find({
'person1': req.params.objectid
})
.populate({
path: 'person1 person2'
})
.exec(function (err, couple) {
if (err)
res.send(err);
res.json(couple)
});
Aber ich würde gerne einen paar zu finden, indem Sie einen Vornamen und nicht um eine ObjectId einer Person, so etwas wie, dass:
Couple.find({
'person1.firstname': "Bob"
})
.populate({
path: 'person1 person2'
})
.exec(function (err, couple) {
if (err)
res.send(err);
res.json(couple)
});
Aber es ist immer leer...
Sowieso um dieses Problem zu lösen?
Danke für jedes feedback.
BEARBEITEN
Ich nur implementiert, die Antwort:
Lassen sehen mein Paar nun das Modell:
var Person = require('mongoose').model('Person');
var coupleSchema = new Schema({
person1 : [{ type: Schema.Types.ObjectId, ref: 'Person' }],
person2 : [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});
coupleSchema.statics.findByUsername = function (username, callback) {
var query = this.findOne()
Person.findOne({'firstname': username}, function (error, person) {
query.where(
{person1: person._id}
).exec(callback);
})
return query
}
module.exports = mongoose.model('Couple', coupleSchema);
Mit dieser Verwendung:
Couple.findByUsername(req.params.username, function (err, couple) {
if(err)
res.send(err);
res.json(couple);
});
Funktioniert! Danke für deine Antwort und Bearbeitungen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem
couple
Modellperson1
ist eine ObjectID (ich weiß, dass Sie es wissen), so hat es keine offensichtlich keine Eigenschaft.firstname
.Tatsächlich der beste Weg, um dies zu erreichen, ist zu finden, die die Nutzer, indem es die ersten Namen und dann die Abfrage der paar, mit der
id
des Benutzers.Diese Methode könnte/sollte, stand in der
couple
Modell als statische Methode (Vereinfachtes Codebeispiel):Nur wie in diesem Beispiel.
EDIT: Auch beachten Sie, dass der ref muss die
_id
(also man konnte nicht speichern, mit dem ersten Namen, das wäre eine schlechte Idee auf jeden Fall).Berücksichtigung edit:
Person._id
ist vielleicht einString
und die Referenz ist einObjectId
wenn ja, versuchen Sie:Auch Sie variable
person
und nichtPerson
. Versuchen Sie, melden Sieperson
um zu sehen, ob Sie etwas bekommen.Endlich, mein code-Beispiel ist wirklich einfach, vergessen Sie nicht, um Fehler zu behandeln und alle (siehe den link gab ich dir oben, was abgeschlossen ist).
populate
.coupleSchema.statics.findByPersonFirstname
:Person.findOne is not a function
import
oderrequire
IhrePerson
oder Modell