Mongodb don';不允许使用updateOne函数使用$push将部分匹配的文档添加到数组中

Mongodb don';不允许使用updateOne函数使用$push将部分匹配的文档添加到数组中,mongodb,duplicates,push,Mongodb,Duplicates,Push,使用updateOne检查文档是否与$push/$addToSet数组(“声明”)中的现有文档部分匹配(2个或更多字段),并且不允许将其推送到数组中 结构如下: { "_id": ObjectId("5f50c93dda654e891c903efb"), "claims":[ { "username": "Foo&quo

使用
updateOne
检查文档是否与
$push
/
$addToSet
数组(“声明”)中的现有文档部分匹配(2个或更多字段),并且不允许将其推送到数组中

结构如下:

{
    "_id": ObjectId("5f50c93dda654e891c903efb"),
    "claims":[
                {
                    "username": "Foo",
                    "claim_id":"12345",
                    "claimed_at":"2020-08-31T17:18:52.818737",
                },
                {
                    "username": "Bar",
                    "claim_id":"54321",
                    "claimed_at":"2020-08-31T17:18:52.818737",
                }
             ]
                
}
无法使用
$addToSet
,因为其他字段值如
处声明的值未知,
如果它只匹配单个字段,比如
user\u id
它正在工作, 我错过了一些东西

db.claims.updateOne(
{
    "_id": ObjectId("5f50c93dda654e891c903efb"),
    "claims":{"$ne": {"username":"Foo"}}
},
{
   "$push":
               {
                  "claims":
                            {
                                "username": "Foo",
                                "claim_id":"12345",
                                "claimed_at":"2020-09-02T17:08:23.514342",
                            }
                }
})

您可以尝试使用
$elemMatch
$not

db.claims.updateOne({
    "_id": ObjectId("5f50c93dda654e891c903efb"),
    claims: {
        $not: {
            $elemMatch: {
                username: "Foo",
                claim_id: "12345"
            }
        }
    }
}, {
    "$push": {
        "claims": {
            "username": "Foo",
            "claim_id": "12345",
            "claimed_at": "2020-09-02T17:08:23.514342",
        }
    }
})

您可以尝试使用
$elemMatch
$not

db.claims.updateOne({
    "_id": ObjectId("5f50c93dda654e891c903efb"),
    claims: {
        $not: {
            $elemMatch: {
                username: "Foo",
                claim_id: "12345"
            }
        }
    }
}, {
    "$push": {
        "claims": {
            "username": "Foo",
            "claim_id": "12345",
            "claimed_at": "2020-09-02T17:08:23.514342",
        }
    }
})

用户名“Foo”只允许添加到另一个声明中,它正在工作,谢谢用户名“Foo”只允许添加到另一个声明中,它正在工作,谢谢