MongoDB-.update()vs.findAndModify()错误

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

下面的问题更多的是出于好奇

我目前正在运行一个脚本,该脚本通过将对的ObjectID引用推入到用户架构内的数组来更新数据库中的每个用户

据我所知,MongoDB中的
.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 }}
});

原子性是两者之间更相关的区别。看见