mongoDB update很多,其中up​​sert为true,$ in in where where

时间:2017-10-26 07:30:12

标签: mongodb

如果条件不符合upsert,如何插入许多记录,例如,请考虑以下查询,

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

在我使用的情况下" $ in" [1,2],如果有macID的记录:1那么我应该使用" logDetails"更新记录,如果我找不到macID的记录:2那么我需要插入记录。如果我发现两个记录都存在则更新两个或如果我发现两个记录都不存在则插入。

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

{
    "_id" : ObjectId("59f18e68c19f798cffa406a8"),
    "logDetails" : [ 
        {
            "wk" : 15,
            "score" : 15
        }
    ]
}

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

1 个答案:

答案 0 :(得分:0)

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

所以upsert: true告诉MongoDB只创建一个文档(而不是两个)。

您必须提供多个更新请求(使用updateOne updateMany而不是int operator+(A a, int b) { return a + b; } )。