【问题标题】:MongoDB - .update() vs .findAndModify() errorMongoDB - .update() 与 .findAndModify() 错误
【发布时间】:2016-01-06 16:51:44
【问题描述】:

出于好奇,以下问题更多。

我目前正在运行一个脚本,该脚本通过将 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 查询有问题,但我不知道为什么。我尝试用pano.author 替换ObjectId(pano.author),但无济于事。

TL;DR:.update 在 .findAndModify 不起作用的地方起作用

【问题讨论】:

标签: mongodb


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-09-25
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多