我可以根据收集条件更新文档吗?
Can I update a document base on collection condition?
我想确保在执行更新之前满足某些条件运算.
在单个查询中使用 MongoDB 是否可行?
比如我有以下集合A:
{"_id":"1", "content":{"a":1, "b":2}},
{"_id":"2", "content":{"a":1, "b":2}},
我想对“_id”为“1”的文档执行更新,前提是整个集合 A 中没有包含“_id”:“2”的文档。
您可以使用 $lookup
检查文档 _id:"2"
是否存在。之后,根据 $lookup
结果执行 $merge
更新回 doc _id:"1"
.
db.collection.aggregate([
{
$match: {
_id: "1"
}
},
{
"$lookup": {
"from": "collection",
"let": {
docId: "2"
},
"pipeline": [
{
$match: {
$expr: {
$eq: [
"$_id",
"$$docId"
]
}
}
}
],
"as": "doc2"
}
},
{
$match: {
doc2: []
}
},
{
$addFields: {
someNewFields: "..."
}
},
{
$project: {
doc2: false
}
},
{
"$merge": {
"into": "collection",
"on": "_id",
"whenMatched": "replace"
}
}
])
这是文档 _id:"2"
存在的 Mongo playground。
这里是 Mongo playground 文档 _id:"2"
不存在。
我想确保在执行更新之前满足某些条件运算.
在单个查询中使用 MongoDB 是否可行?
比如我有以下集合A:
{"_id":"1", "content":{"a":1, "b":2}},
{"_id":"2", "content":{"a":1, "b":2}},
我想对“_id”为“1”的文档执行更新,前提是整个集合 A 中没有包含“_id”:“2”的文档。
您可以使用 $lookup
检查文档 _id:"2"
是否存在。之后,根据 $lookup
结果执行 $merge
更新回 doc _id:"1"
.
db.collection.aggregate([
{
$match: {
_id: "1"
}
},
{
"$lookup": {
"from": "collection",
"let": {
docId: "2"
},
"pipeline": [
{
$match: {
$expr: {
$eq: [
"$_id",
"$$docId"
]
}
}
}
],
"as": "doc2"
}
},
{
$match: {
doc2: []
}
},
{
$addFields: {
someNewFields: "..."
}
},
{
$project: {
doc2: false
}
},
{
"$merge": {
"into": "collection",
"on": "_id",
"whenMatched": "replace"
}
}
])
这是文档 _id:"2"
存在的 Mongo playground。
这里是 Mongo playground 文档 _id:"2"
不存在。