mongodb - 将子文档添加到现有的 mongodb 文档

标签 mongodb mongoose mean-stack addchild mongoose-schema

基本上我只是想向我现有的具有以下架构的 mongodb 文档添加一个新的子文档

/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 路径

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() 中取出冒险时,代码不会中断,但是当我插入冒险时,我得到一个错误

/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 架构:

// 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 - 将子文档添加到现有的 mongodb 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32752897/

相关文章:

node.js - Mongoose 嵌套对象数组中的唯一值

javascript - 找不到类型为 '[object Object]' 的不同支持对象 'object', meteor 集合中出现错误

node.js - Node js集群 Mongoose 连接

javascript - 在客户端 (Angular) 和服务器 (NodeJs) 上共享对象定义

webpack 编译 sass 错误 : Invalid CSS after "...load the styles": expected 1 selector or at-rule, 是 "var content = requi"

swift - 如何使用swift在heroku app上上传图片

javascript - 需要帮助理解 mongodb 聚合 $cond 的 for 循环

javascript - 如何使用 Mongoose/Node.js 删除数组中的项目

javascript - 某些特定数据未从服务器文件保存到数据库中

jwt - 我可以使用 jwt 来存储用户的购物车商品直到结账吗?