我正在尝试将嵌入文档添加到现有文档字段中。我在搜索中找到了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
我错过了什么?
答案 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()