在 MongoDB 中查找字段值在其他集合中不存在的文档
Find documents in MongoDB where value of field does not exist in other collection
我的子文档在其父 userFolder 被删除后无法存档。
子文档中的 link 设置为“组”字段,这是其父文档的 objectID 的字符串版本。
我如何进行聚合以提供在 userFolder 集合的 objectID 中找不到“组”值的文档列表
类似这样的方法应该有效,您需要根据需要替换集合和字段名称:
db.child_collection.aggregate([
{
$lookup: {
from: "parent_collection",
let: {
parent_group: {
$toObjectId: "$group"
}
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$_id",
"$$parent_group"
]
}
}
}
],
as: "parent_docs"
}
},
{
$match: {
"parent_docs": {
$size: 0
}
}
}
])
在 $lookup stage 之后,每个文档都会有一个 parent_docs
数组。如果子文档有一个未删除的父文档,则该数组将只有一个元素。否则它是孤立的,数组将为空。您有兴趣查找孤立文档,因此我们筛选大小为 0
.
的数组
我的子文档在其父 userFolder 被删除后无法存档。 子文档中的 link 设置为“组”字段,这是其父文档的 objectID 的字符串版本。
我如何进行聚合以提供在 userFolder 集合的 objectID 中找不到“组”值的文档列表
类似这样的方法应该有效,您需要根据需要替换集合和字段名称:
db.child_collection.aggregate([
{
$lookup: {
from: "parent_collection",
let: {
parent_group: {
$toObjectId: "$group"
}
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$_id",
"$$parent_group"
]
}
}
}
],
as: "parent_docs"
}
},
{
$match: {
"parent_docs": {
$size: 0
}
}
}
])
在 $lookup stage 之后,每个文档都会有一个 parent_docs
数组。如果子文档有一个未删除的父文档,则该数组将只有一个元素。否则它是孤立的,数组将为空。您有兴趣查找孤立文档,因此我们筛选大小为 0
.