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

时间:2015-10-08 21:40:18

标签: mongodb

以下是出于好奇的问题。

我目前正在运行一个脚本,通过将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查询提出了问题,但我无法解决原因。我尝试用ObjectId(pano.author)替换pano.author,但无济于事。

TL; DR:.update适用于.findAndModify不

的地方

1 个答案:

答案 0 :(得分:3)

在shell中,findAndModify采用单个参数对象而不是update之类的单独参数,因此您需要将其称为:

db.users.findAndModify({
    query: { _id: ObjectId(pano.author) },
    update: { $addToSet: { panos: pano._id }}
});