下面的问题更多是出于好奇。
我目前正在运行一个脚本,通过将ObjectID引用推入用户模式中的数组来更新数据库中的每个用户。
从我的理解来看,MongoDB的.update
和.findAndModify
命令没有什么区别。然而,当我使用.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)
}
用户按预期更新。当我用.findAndModify()
替换.users()
时,控制台中出现以下错误日志:
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不
在shell中,findAndModify
接受单个参数对象,而不是像update
那样接受单独的参数,因此您需要将其调用为:
db.users.findAndModify({
query: { _id: ObjectId(pano.author) },
update: { $addToSet: { panos: pano._id }}
});