基于此SO question和实际this answer我尝试更新子文档上的字段。
我的代码是:
db.venue.find().limit(10).forEach(
function (elem) {
for (var i = elem.events.length - 1; i >= 0; i--) {
elem.events[i].urls = [];
if(elem.events[i].facebook_id){
elem.events[i].urls = {'facebook_url' : elem.events[i].website }
}
if(elem.events[i].eventbrite_id){
elem.events[i].urls = {'eventbrite_url' : elem.events[i].website }
}
//delete elem.events[i].website
};
db.venue.update(elem);
}
);
如果elem.events[i]
的facebook_id或eventbrite_id分别更新了数组的网址(出于架构原因)。
但是我得到了
Error: Printing Stack Trace
at printStackTrace (src/mongo/shell/utils.js:37:15)
at doassert (src/mongo/shell/assert.js:6:5)
at assert (src/mongo/shell/assert.js:14:5)
at DBCollection.update (src/mongo/shell/collection.js:220:5)
at (shell):13:18
at DBQuery.forEach (src/mongo/shell/query.js:264:9)
at (shell):1:27
Mon Jan 6 20:10:48.758 assert failed : need an object at src/mongo/shell/assert.js:7
我无法理解。当前用户的权限很好。
答案 0 :(得分:1)
您需要致电save
,而不是update
:
`db.venue.save(elem);`
Update有两个参数:查询文档和更新文档。
错误发生在您链接的原始帖子上。