mongoDB updateMany with upsert true 和 $in in where 条件

use*_*189 4 mongodb

如果where条件不满足upsert true,如何插入多条记录,例如考虑下面的查询,

db.getCollection('Llog').updateMany(
{"macID" : {$in : [1,2]}}, 
{$push : { "logDetails" : { $each : [{ wk: 15, score: 15 }] }}}, 
{upsert : true}
) 
Run Code Online (Sandbox Code Playgroud)

在我的where条件下,我使用“$in”[1,2],如果有macID:1的记录,那么我应该用“logDetails”更新记录,如果我没有找到macID:2的记录,那么我需要插入记录。如果我发现两条记录都存在,则更新两条记录,或者如果我发现两条记录都不存在,则插入。

对于上面的代码,如果两者都不存在,它会插入如下记录

{
    "_id" : ObjectId("59f18e68c19f798cffa406a8"),
    "logDetails" : [ 
        {
            "wk" : 15,
            "score" : 15
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

例如,如果 macId : 1 可用,那么我执行第一组 updateMany 代码,那么它应该更新 macID : 1 并插入 macID : 2,但它不会插入 macID : 2 但会更新 macID : 1。

Neo*_*dan 9

{"macID" : {$in : [1,2]}}并不意味着您正在搜索两个文档(带有"macID" : 1"macID" : 2),而是意味着您正在搜索等于macID1的任何文档2

因此upsert: true告诉 MongoDB 仅创建一个文档(而不是两个)。

您必须提供多个更新请求(将bulkWriteupdateOnenot一起使用updateMany)。

  • 任何寻找实现的人,[查看这个答案](/sf/answers/2574246601/) (3认同)