2015-09-24 13 views
12

WesentlichenHinzufügen Kind Dokument vorhandenen mongodb Dokument

/models/server/destination.js

Ich versuche gerade ein neues Teildokument zu meinem bestehenden mongodb Dokument hinzuzufügen, dass das folgende Schema hat
// this is the "destination" model for mongoose 
var mongoose = require('mongoose') 
var Adventure = require('../models/adventure') 

// this is the schema that every entry will get when a new trip is made. 
var tripSchema = mongoose.Schema({ 
    name: { type: String, required: true }, 
    city: { type: String, required: true }, 
    dateStart: { type: Date, required: true }, 
    dateFinish: { type: Date, required: true }, 
    adventures: [Adventure] 
}) 

// module.exports makes this model available to other file 
module.exports = mongoose.model('Destination', tripSchema) 

/server/models/adventure.js

var mongoose = require('mongoose') 

var adventure = mongoose.Schema({ 
    site: String, 
    rating: String, 
    photo: String, 
    website: String, 
    date: Date 
}) 

module.exports = mongoose.model('Adventure', adventure) 

REST Route Abenteuer

app.post('/api/destinations/:id/addAdventures', destinationsController.addAdventures) 

/server/controllers/controller.js

module.exports.addAdventures = function(req, res) { 
    var id = req.params.id; 
    Destination.findOne({ _id: id }, function(err, result) { 
     var adventure = new Adventure(req.body) 
     var destination = result 
     destination.adventures.push(adventure) 
     destination.save(function(err, advresult) { 
      console.log('push worked') 
      res.json(advresult); 
     }) 
    }) 
} 

zu schreiben Wenn ich das Abenteuer nehmen aus dem destination.adventures.push() der Code nicht brechen, aber wenn ich Abenteuer einfügen Ich erhalte einen Fehler

/Travellog/node_modules/mongoose/lib/types/array.js:117 
    return this._schema.caster.cast(value, this._parent, false); 
          ^TypeError: undefined is not a function 
    at Array.MongooseArray.mixin._cast (/Travellog/node_modules/mongoose/lib/types/array.js:117:32) 
    at Array.MongooseArray.mixin._mapCast (/Travellog/node_modules/mongoose/lib/types/array.js:286:17) 
    at Object.map (native) 
    at Array.MongooseArray.mixin.push (/Travellog/node_modules/mongoose/lib/types/array.js:299:25) 
    at Query.<anonymous> (/Travellog/server/controllers/destinations-controller.js:28:28) 
    at /Travellog/node_modules/mongoose/node_modules/kareem/index.js:177:19 
    at /Travellog/node_modules/mongoose/node_modules/kareem/index.js:109:16 
    at process._tickCallback (node.js:355:11) 

Antwort

29

Der Fehler, den Sie erhalten, ist als Ergebnis Einbetten des Modells Adventure anstelle des Schemas. Sie müssen das Adventure Schema in der Zielschemadefinition hinzufügen, um das Schema-Eigenschaft des Adventure Modells:

// this is the "destination" model for mongoose 
var mongoose = require('mongoose'); 
var AdventureSchema = require('../models/adventure').schema; /* <- access the schema via its Model.schema property */ 

var tripSchema = mongoose.Schema({ 
    name: { type: String, required: true }, 
    city: { type: String, required: true }, 
    dateStart: { type: Date, required: true }, 
    dateFinish: { type: Date, required: true }, 
    adventures: [AdventureSchema] 
}); 
+2

Awesome! Das hat perfekt funktioniert, danke, dass du für immer daran festhältst. Ich habe Mongoose-Dokumente gelesen, aber nach dem Aussehen hat das mit node.js wirklich zu tun? – pwborodich

+2

Danke. Ich hatte auch das gleiche Problem. – FarheenP

+2

Vielen Dank. Versucht, die Schemas in verschiedene Dateien zu trennen und das Modell oder etwas versehentlich eingeschlossen zu haben. 5 Stunden später. –

Verwandte Themen