数组中的Mongodb更新对象

时间:2019-06-20 09:22:21

标签: mongodb

我在mongodb中有下一个收藏集。

{"_id" : "10",
    "g_user_id" : "10",
    "contracts" : [
        {
            "user_name" : "JOHAN",
            "contract_id" : "contract1",
            "formats": 
                ["format1","format2"]
        },
        {
            "user_name" : "MIKE",
            "contract_id" : "contract1",
            "formats":  : [
                "format1",
                "format2"
            ]
        }
    ]
}

在下一种情况下,我想更新合约数组,如果数组合约中不存在新的数组元素,我想插入一个新的数组元素;如果数组中存在,我想更新该元素,对于我来说,一个元素等于另一个只是考虑到用户名和合同与我尝试插入的用户名和合同相同,而忽略了格式。

我尝试了下一个

db.collection.update({_id: "10"},
  {$addToSet: 
  { contracts: 
    { $each: [ {
        "user_name" : "MIKE",
        "contract_id" : "contract1",
        "formats": 
            ["format1","format3"]
    }, {
        "user_name" : "PRUEBA",
        "contract_id" : "contrato1",
        "formats": 
            ["formato1","formato2"]
    }] }
    }},{upsert : true});
}

但是在这种情况下,我想插入Prueba,这是正确的并且对我有用,但是在MIKE的情况下,我想更新它,因为user_name和contract_id等于数组中我具有的其他元素,但是mongodb认为这是不相等的,因为这个新元素具有不同的格式,在这种情况下,我将在数组中使用user_name(MIKE)和contract_id(contract1)并具有不同格式的2个元素,这对我来说是不正确的。

有人可以帮助我吗?我只想考虑user_name和contract_id是否存在来完全更新数组中的元素,或者如果数组中不存在新元素,则插入它。

谢谢。

0 个答案:

没有答案