将文档添加到嵌入的文档数组

时间:2012-03-29 10:07:40

标签: node.js mongodb mongoose

我正在尝试将嵌入文档添加到现有文档字段中。我在搜索中找到了one fitting answer,但我遇到了错误。我正在使用node.js,Express和Mongoose。

我的数据库模式:

var entry = new Schema({
    name        : { type : String, required : true},
    description : { type : String, default: ""},
});

var compo = new Schema({
    name        : String,
    description : String,
    entries     : [entry]
});

我正在尝试使用以下代码更新条目数组

var entry = new entryModel();
entry.name = "new name";
entry.description= "new description";

compoModel.findOne(query, function (err, item) {
  if (item) {
    item.entries.push(entry);
    item.save(function (err) {
      if (!err) {
        log.debug('Entry added successfully.');
      } else {
        log.error("Mongoose couldn't save entry: " + err);
      }
    });
  }
});

产生错误:TypeError: Object.keys called on non-object

我错过了什么?

2 个答案:

答案 0 :(得分:1)

所以我设法通过Model.update方法让它工作,只需在compo.entries列表中添加一个新对象并调用compoModel.update

答案 1 :(得分:1)

通过清除子文档数组解决了我的类似问题(同一错误)。它是在子文件计划的定义之前填充的。 至少这是我认为发生的事情。

E.g:

var token = new Schema( { value: String, expires: Date } )
var user = new Schema( { username: String, tokens: [token] } )

..并且,在定义'token'方案之前,我有以下条目:

{ username: 'foo', tokens: ['123456'] }

..所以,清算代币为我做了。

user.tokens = []
user.save()
相关问题