MongoDB - .update() vs .findAndModify() error



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

我目前正在运行一个脚本,通过将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 }}
});

最新更新