添加到mongodb中的列表数组?

时间:2015-07-17 20:12:46

标签: mongodb mongoose

这里有愚蠢的问题,但我在网上找到一个例子时遇到了麻烦。

我在mongoDB上建立了一个包含对象数组的模型,如下所示:

var ProjectSchema = new Schema({

    project_id: { type: String },
    item: {
        title: { type: String },
        owners: [{
            first_name : {type: String} ,
            middle_name : {type: String},
            other_name: {type: String},
            last_name: {type: String},
            order: {type: Number, 'default': 1}
        }]
    }
}]

所以你可以看到该项是一个字段列表。然后owners是一系列字段列表。当我创建项目时,我试图像这样设置所有者:

var newProject = new Models.Project({
                                'item.title': title,
                                'item.owners[0].last_name': name,
                                'item.owners[0].order': 1
                            });

这不会产生错误,但项目字段也不会保存(item.title保存正常)。  我也试过这个,但它给了我一个错误:

var newProject = new Models.Project({
                                'item.title': title,
                                item.owners.push({last_name: name, order: 1})
                            });

我应该如何参考这些子文档,以便保存它们?

2 个答案:

答案 0 :(得分:1)

它是一个简单的JSON对象。使用Javascript,它非常直接。下面的代码生成mongoDB doc中给出的示例对象:

var address1 = new Object();
address1.street = "123 Fake Street";
address1.city = "Faketon";
address1.state = "MA";
address1.zip = "12345";

var address2 = new Object();
address2.street = "1 Some other Street";
address2.city = "Boston";
address2.state = "MA";
address2.zip = "12345";




var data = new Object();

data._id = "joe";
data.name = "Joe Bookreader";
var addressArray = new Array();
addressArray.push(address1);
addressArray.push(address2);
data.addresses = addressArray;

alert(JSON.stringify(data));

答案 1 :(得分:1)

不要在新文档的字段中使用点表示法,而是使用doc的实际结构创建它:

var newProject = new Models.Project({
  item: {
    title: title,
    owners: [{
      last_name: name,
      order: 1
    }]
});