使用mongoose在嵌入数据模型中添加对象

Mar*_*lac 2 mongoose mongodb node.js

我是mongo和mongoose的新手,我想知道当我们有一个嵌入式数据模型时,我们如何添加,删除或编辑数据库中的对象如下:

var userSchema = mongoose.Schema({

    local            : {
        email        : String,
        password     : String,
    },

    houses             : [

        {
            phone_numbers : [ {number: String} ],
            adresse         : String,

        }

     ]

    });


    module.exports = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)

例如,我想为我的用户添加一个新的"房子".

所以我尝试过:

            User.findById(req.user.id, function(err, user){

                user.houses.adresse = 'TEST';
                user.save();

             });
Run Code Online (Sandbox Code Playgroud)

但它似乎没有用,我没有找到如何在mongoose docs中做到这一点.关于如何实现这一目标的任何想法?

谢谢你的帮助 !

Hüs*_*BAL 9

您可以将模型分开以便于阅读,并且您可以使用House模型添加子文档以供使用User;

user.js的

var House = require("House");

var userSchema = mongoose.Schema({

    email : String,
    password : String,
    houses : [ House.schema ]

});

module.exports = mongoose.model('User', userSchema);
Run Code Online (Sandbox Code Playgroud)

House.js

var houseSchema = mongoose.Schema({

    phone_numbers : [ String ],
    adresse         : String,

});


module.exports = mongoose.model('House', houseSchema);
Run Code Online (Sandbox Code Playgroud)

在你的控制器;

var User = require("models/User");
var House = require("models/House");

......


User.findById(req.user.id, function(err, user){

    var houseModel = new House();
    houseModel.adresse = "TEST";
    user.houses.push(houseModel);
    user.save();
 });
Run Code Online (Sandbox Code Playgroud)