将文档添加到embedded式文档数组

我正在尝试将embedded式文档添加到现有的文档字段。 我发现一个适合的search答案 ,但我遇到了错误。 我正在使用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

我错过了什么?

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

我通过清除子文档数组解决了类似的问题(相同的错误)。 在子文档scheme的定义之前已经有人填写了。 至less这是我认为发生的事情。

例如:

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

在定义“令牌”scheme之前,我有如下条目:

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

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

 user.tokens = [] user.save()