将文档添加到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()