【发布时间】:2016-01-06 16:51:44
【问题描述】:
出于好奇,以下问题更多。
我目前正在运行一个脚本,该脚本通过将 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 查询有问题,但我不知道为什么。我尝试用pano.author 替换ObjectId(pano.author),但无济于事。
TL;DR:.update 在 .findAndModify 不起作用的地方起作用
【问题讨论】:
-
原子性是两者之间更相关的区别。见stackoverflow.com/questions/10778493/…
标签: mongodb