以下是出于好奇的问题。
我目前正在运行一个脚本,通过将ObjectID引用推送到用户架构中的数组来更新数据库中的每个用户。
根据我的理解,MongoDB中的.update
和.findAndModify
命令之间存在little difference。 但是,我在使用.findAndModify
时收到错误,而.update
效果非常好。
这是我的剧本:
var panos = db.panos.find();
var total = 0;
while(panos.hasNext()) {
var pano = panos.next();
var author = db.users.findOne({ _id: pano._id});
/* here I use the .update command */
db.users.update(
{ _id: ObjectId(pano.author) },
{ $addToSet: { panos: pano._id }}
);
total++;
print('total looked at:', total)
}
用户按预期更新。当我用.users()
替换.findAndModify()
时,控制台中会出现以下错误:
Error: findAndModifyFailed failed: {
"ok" : 0,
"errmsg" : "no such command: _id",
"code" : 59,
"bad cmd" : {
"_id" : ObjectId("5616dd0a35ea7932106b7c57"),
"findandmodify" : "users"
}
}
看起来_id
查询提出了问题,但我无法解决原因。我尝试用ObjectId(pano.author)
替换pano.author
,但无济于事。
TL; DR:.update适用于.findAndModify不
的地方答案 0 :(得分:3)
在shell中,findAndModify
采用单个参数对象而不是update
之类的单独参数,因此您需要将其称为:
db.users.findAndModify({
query: { _id: ObjectId(pano.author) },
update: { $addToSet: { panos: pano._id }}
});