如何在 mongodb 中同时 运行 $pull 和 $set

How to run $pull and $set at the same time in mongodb

我正在尝试 运行 下面的查询。

db.collection.update_many(
        {"id":{"$in":id_list}},
        {"$set":
            {
                "update": {'rank':'abc'}
            }
        },
        {
            { "$pull": { "email": 'test@test.com' } }
        }

    )

当我 运行 这个时,我得到以下错误。

upsert should be true or false

在做一些研究时,发现我们不能同时使用两个更新。因此,作为一种解决方法,我 运行 单独更新每个更新并且它工作正常。

先这个,

db.collection.update_many(
        {"id":{"$in":id_list}},
        {"$set":
            {
                "update": {'rank':'abc'}
            }
        }

    )

然后,

db.collection.update_many(
        {"id":{"$in":id_list}},
        {
            { "$pull": { "email": 'test@test.com' } }
        }

    )

这是一个好方法吗?对于这个问题有没有更好的解决方案,我不必对数据库进行 2 次调用?

update 参数应该是单个对象,字段的名称类似于 $set$pull。如果将它们组合成作为第二个参数传递的单个对象,它应该可以工作,例如:

db.collection.update_many(
        {"id":{"$in":id_list}},
        {
         "$set": {"update": {'rank':'abc'} },
         "$pull": { "email": 'test@test.com' }
        }
    )