如何只获取不包含在另一条记录数组中的记录
How to get only the records which are not contained in the array of another record
我正在尝试从 MongoDB 中检索所有未在另一个文档的数组字段中引用的记录。我有以下格式的数据:
[
{ "domain": "foo.com", "altNames": [] },
{ "domain": "bar.com", "altNames": [] },
{ "domain": "zaz.com", "altNames": ["foo.com", "bar.com"]},
{ "domain": "baz.com", "altNames": ["boo.com"]}
]
我想从这些数据中检索域为 zaz.com
和 baz.com
的记录,因为它们的 domain
不在另一个记录 altNames
数组中。
进行自查,检查结果数组是否为空
db.collection.aggregate([
{
"$lookup": {
"from": "collection",
let: {
d: "$domain"
},
pipeline: [
{
"$match": {
$expr: {
$in: [
"$$d",
"$altNames"
]
}
}
},
{
$limit: 1
}
],
"as": "altNamesLookup"
}
},
{
"$match": {
altNamesLookup: []
}
},
{
"$project": {
altNamesLookup: false
}
}
])
这里是Mongo playground供您参考。
我正在尝试从 MongoDB 中检索所有未在另一个文档的数组字段中引用的记录。我有以下格式的数据:
[
{ "domain": "foo.com", "altNames": [] },
{ "domain": "bar.com", "altNames": [] },
{ "domain": "zaz.com", "altNames": ["foo.com", "bar.com"]},
{ "domain": "baz.com", "altNames": ["boo.com"]}
]
我想从这些数据中检索域为 zaz.com
和 baz.com
的记录,因为它们的 domain
不在另一个记录 altNames
数组中。
进行自查,检查结果数组是否为空
db.collection.aggregate([
{
"$lookup": {
"from": "collection",
let: {
d: "$domain"
},
pipeline: [
{
"$match": {
$expr: {
$in: [
"$$d",
"$altNames"
]
}
}
},
{
$limit: 1
}
],
"as": "altNamesLookup"
}
},
{
"$match": {
altNamesLookup: []
}
},
{
"$project": {
altNamesLookup: false
}
}
])
这里是Mongo playground供您参考。