MongoDB-.update()vs.findAndModify()错误
下面的问题更多的是出于好奇 我目前正在运行一个脚本,该脚本通过将对的ObjectID引用推入到用户架构内的数组来更新数据库中的每个用户 据我所知,MongoDB中的MongoDB-.update()vs.findAndModify()错误,mongodb,Mongodb,下面的问题更多的是出于好奇 我目前正在运行一个脚本,该脚本通过将对的ObjectID引用推入到用户架构内的数组来更新数据库中的每个用户 据我所知,MongoDB中的.update和.find和modify命令之间存在差异但是,当我使用.find和modify时,我收到一个错误,而.update工作得非常好 这是我的剧本: var panos = db.panos.find(); var total = 0; while(panos.hasNext()) { var pano = pano
.update
和.find和modify
命令之间存在差异但是,当我使用.find和modify
时,我收到一个错误,而.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"
}
}
看起来\u id
查询出了一个问题,但我不知道为什么。我试着用pano.author
替换ObjectId(pano.author)
,但没有效果
TL;DR:.update在shell中的.findAndModify不接受单个参数对象而不是单独的参数(如update
)的情况下工作,因此您需要将其称为:
db.users.findAndModify({
query: { _id: ObjectId(pano.author) },
update: { $addToSet: { panos: pano._id }}
});
原子性是两者之间更相关的区别。看见