不允许使用 updateOne 函数通过 $push 将部分匹配的文档添加到数组
don't allow partially matching document to add to array with $push using updateOne function
使用 $push
/ $addToSet
使用 updateOne
检查文档是否与数组 ('claims') 中的现有文档部分匹配(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
,因为 claimed_at
等其他字段值未知,
如果它只是像 user_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",
}
}
})
使用 $push
/ $addToSet
使用 updateOne
检查文档是否与数组 ('claims') 中的现有文档部分匹配(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
,因为 claimed_at
等其他字段值未知,
如果它只是像 user_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",
}
}
})