使用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文档中做到这一点。你知道我该怎么做吗?

感谢您的帮助

您可以将模型分开以提高可读性,并且您可以使用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();
 });

//Craete an object and assign it the existing embedded doc.
var item = { houses: req.user.houses };
// add your new address into the existing object
item.houses.push({adresse:'Test'})
// $set below updates the whole document along with your new address
User.findByIdAndUpdate(req.user.id, { $set: item }, function(err, result) {
  if (err) {
      callback(err, undefined);
  } else if (result) {
      callback(err, result);
  }
});

最新更新