基本上,我只是想将新的子文档添加到具有以下架构的现有mongodb文档中
Essentially I am just trying to add a new sub-document to my existing mongodb document that has the following schema
/models/server/destination.js
// 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路线
REST route to post to adventures
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); }) }) }当我从destination.adventures.push()中退出冒险时,代码不会中断,但是当我插入冒险时会出现错误
When I take the adventure out of the destination.adventures.push() the code does not break, but when I insert adventures I get an error
/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)推荐答案
您收到的错误是由于嵌入了Adventure模型而不是模式.您需要在目标模式定义的Adventure模型的模式属性中添加Adventure模式:
The error you are getting is as a result of embedding the Adventure model instead of the schema. You need to add the Adventure schema in the destination schema definition the Adventure model's schema property:
// 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] });更多推荐
将子文档添加到现有的mongodb文档中
发布评论