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”只允许添加到另一个声明中,它正在工作,谢谢