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

时间:2014-03-28 13:03:57

标签: node.js mongodb mongoose

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

var userSchema = mongoose.Schema({

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

    houses             : [

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

        }

     ]

    });


    module.exports = mongoose.model('User', userSchema);

例如,我想向我的用户添加一个新的“房子”。

所以我试过了:

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

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

             });

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

感谢您的帮助!

2 个答案:

答案 0 :(得分: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);

<强> House.js

var houseSchema = mongoose.Schema({

    phone_numbers : [ String ],
    adresse         : String,

});


module.exports = mongoose.model('House', houseSchema);

在您的控制器中;

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();
 });

答案 1 :(得分:1)

foobars = FooBar.objects.select_related("bar").filter(foo=foo_instance)
for foobar in foobars:
    print(foobar.bar.barfield, foobar.foobarfield)