2017-08-31 7 views
0

Ich bin meine App auf Node 8.4.0 MongoDB 3.4 laufen und ich kann nicht Mungo Bevölkerung zu arbeiten.NodeJS - Mongoose Population Problem

Ich habe zwei Modelle:

var mongoose = require('mongoose'); 
 

 
var Carrier = require('./Carrier.js'); 
 

 
var ValuationFormSchema = new mongoose.Schema({ 
 
    assignmentnumber: { 
 
     type: Number, 
 
     default: Number() 
 
    }, 
 
    assignmentpartnumber: { 
 
     type: Number, 
 
     default: Number() 
 
    }, 
 
    currency: { 
 
     type: String, 
 
     default: String() 
 
    }, 
 
    email: { 
 
     type: String, 
 
     default: String() 
 
    }, 
 
    iagree: { 
 
     type: Boolean, 
 
     default: Boolean() 
 
    }, 
 
    totalValue: { 
 
     type: Number, 
 
     default: Number() 
 
    }, 
 
    carrier: [{ 
 
     type: mongoose.Schema.Types.ObjectId, 
 
     ref: 'Carrier' 
 
    }], 
 
    createdAt: { 
 
     type: Date, 
 
     default: Date.now 
 
    }, 
 
    uuid: { 
 
     type: String, 
 
     default: String() 
 
    }, 
 
    submitted: { 
 
     type: Boolean, 
 
     default: false 
 
    }, 
 
    send: { 
 
     type: Boolean, 
 
     default: false 
 
    }, 
 
    template: String, 
 
    surveyvolume: Object, 
 
    agreement: Object 
 
}); 
 

 
module.exports = mongoose.model('ValForm', ValuationFormSchema);

var mongoose = require('mongoose'); 
 

 
var Item = require('./Item.js'); 
 

 
var CarrierSchema = new mongoose.Schema({ 
 
    name: { 
 
     type: String, 
 
     required: true 
 
    }, 
 
    items: [{ 
 
     type: mongoose.Schema.Types.ObjectId, 
 
     ref: 'Item' 
 
    }], 
 
    createdAt: { 
 
     type: Date, 
 
     default: Date.now 
 
    } 
 
}); 
 

 
module.exports = mongoose.model('Carrier', CarrierSchema);

und das ist mein API

app.post('/api/valuationform/populate', function(req, res) { 
 
     var email = req.body.email; 
 
     ValForm.find({'email' : email},{'submitted' : false}) 
 
      .populate('Carrier')    
 
      .exec(function(error, docs) { 
 
       if (!error) { 
 
        console.log(JSON.stringify(docs)); 
 
        res.json(docs); 
 
       } else { 
 
        res.send('{ error: ' + error + ' }'); 
 
       } 
 
      }); 
 
    })

Statt die Trägerobjekte immer erhalte ich die IDs der Objekte. Es gibt mehrere Träger pro Valforms.

Das Ergebnis sieht wie folgt aus:

{ 
     "_id": "58d24ff9c195a72784108d85", 
     "assignmentid": 123441, 
     "__v": 0, 
     "send": false, 
     "uuid": "044da37c-8976-4f80-b103-d07c43a97af2", 
     "createdAt": "2017-03-22T10:20:41.260Z", 
     "carrier": [ 
      "58d24ff9c195a72784108d86", 
      "58d24ff9c195a72784108d8d" 
     ], 
     "totalValue": 40000, 
     "iagree": false, 
     "email": "[email protected]", 
     "currency": "SEK", 
     "assignmentpartnumber": 0, 
     "assignmentnumber": 0 
    } 

ich die Träger als Objekte zurückgegeben werden wollen nicht OBJECTID Jahren.

Was mache ich hier falsch?

+0

Soweit ich weiß, müssen Sie darauf selbst aufpassen. Sie müssen es manuell in Ihrer Exec-Funktion extrahieren. –

+0

Sorry für dumme Frage, aber diese Träger Objekte existieren mit ID 58d24ff9c195a72784108d86 und 58d24ff9c195a72784108d8d? – Helen

Antwort

0

Vielleicht versuchen Sie in Kleinbuchstaben carrier wie in Ihrem Schema definiert.

ValForm.find({ email: email }, { submitted: false }).populate('carrier').exec(...);