2016-03-19 9 views
0

Ich habe ein Problem mit finden Sie vollständige Modell in Mongoose bevölkern.Kann nicht finden, das volle Modell in Mongoose

2 Modelle Mungo:

//first 
var CardSchema = new Schema({ 
    userId: String, 
    payment: { type: Number, ref: 'Payment' } 
}); 
module.exports = mongoose.model('MedicalCard', CardSchema); 
//second 
var PaymentSchema = new Schema({ 
    _id: Schema.Types.ObjectId, 
    cost: String, 
}); 
module.exports = mongoose.model('Payment', PaymentSchema); 

Und ich möchte alle Wagen bestimmten Benutzer finden:

CardModel.find({ userId: id}).populate('payment').exec(function (err, data) { 
     if (err) { 
      //error 
     } 

     if (data) { 
      console.log(data); 
     } 
    }); 

Aber für mich Ergebnis zurück:

[ 
    { 
    "_id": "56ed9993a5c9067a21edec69", 
    "userId": "56eaccec930c15cf245a86a1", 
    "payment": null, 
    "__v": 0 
    }, 
    { 
    "_id": "56ed99a7a5c9067a21edec6d", 
    "userId": "56eaccec930c15cf245a86a1", 
    "payment": null, 
    "__v": 0 
    } 
] 

Aber Mongotron Rückkehr für mich richtig Ergebnis:

[ 
    { 
    "_id": ObjectId('56ed99a7a5c9067a21edec6d'), 
    "userId": 56eaccec930c15cf245a86a1, 
    "payment": ObjectId('56ed99a7a5c9067a21edec6a') 
    }, 
    { 
    "_id": ObjectId('56ed9993a5c9067a21edec69'), 
    "userId": "56eaccec930c15cf245a86a1", 
    "payment": ObjectId('56ed99a7a5c9067a21edec6c') 
    } 
] 

was könnte das problem sein? Und wie repariert es?

P.S. Ich habe die Zahlung geändert: {Typ: Number, ref: 'Payment'} zu ObjectId geben, aber Problem nicht

+1

entfernen _id aus Ihr PaymentSchema. –

+0

alle gleich. Geben Sie null statt ObjectId – ximet

+0

in Ihrem CardSchema ein, Zahlung ist vom Typ Nummer. Ihre Mongotron-Ausgabe zeigt jedoch die Zahlung einer ObjectId an. Wundern, warum? –

Antwort

0
var PaymentSchema = new Schema({ 
    cost: Number, 
}); 
mongoose.model("Payment", PaymentSchema); 

var CardSchema = new Schema({ 
    userId: String, 
    payment: { type: Schema.ObjectId, ref: 'Payment' } 
}); 
+0

überprüft. Nicht funktioniert – ximet

+0

Das einzige, was zu versuchen ist, ist mit den obigen Modelldefinitionen, ein neues MedicalCard Dokument hinzufügen, fügen Sie eine neue Zahlung zu diesem Dokument und Speichern Sie dann, ob das Populate funktioniert. –

+0

Überprüft. Nicht funktioniert. Fügen Sie neue PaymentSchema2 und CardSheme2 mit Feldzahlung und Typ Schema.ObjectId. Nach dem Hinzufügen eines Elements und mit .find(). population ('Zahlung') - zurückgeben Sie alle das gleiche (alles korrekt ohne Zahlungsfeld - seine Null, aber Mongotron gibt die korrekte Information zurück) – ximet

0

Problem gelöst nächste Lösung gelöst:

1) In Modell Zahlung - löschen _id mit Geben Sie Schema.Types.ObjectId ein.

2) In Code

CardModel.find({ userId: id}).populate('payment').exec(function (err, data) {//some code}); 

löschen .populate:

CardModel.find({ userId: userInfo.userId},function (err, cards) {//some code}); 

Und jetzt diese Methode Rückkehr für mich richtiges Ergebnis: "Zahlung": "56eda8d90982166222480a9f"