将子文档添加到现有的mongodb文档中 [英] Adding child document to existing mongodb document

查看:118
本文介绍了将子文档添加到现有的mongodb文档中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上,我只是想将新的子文档添加到具有以下架构的现有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文档中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆