gpt4 book ai didi

mongodb - 如何在一个集合中查找未被另一集合中的文档引用的 MongoDB 文档?

转载 作者:行者123 更新时间:2023-12-03 08:46:52 26 4
gpt4 key购买 nike

我正在 MonogDB 中寻找一种有效的方法来确定一个集合中的哪些文档未被另一个集合中的文档引用。

数据库包含两个集合,inventorytags,其中 inventory 中的一些(不是全部)文档引用了 之一标签文档:

{
"_id" : ObjectId("5e8df3c02e197074f39f61ea"),
"tag" : ObjectId("5e89a1af96d5d8b30aead768"),
"ean" : "5707196199178",
"location" : "shelf 1"
},
{
"_id" : ObjectId("5e8df211727079cdc24e20e1"),
"ean" : "5707196199178",
"location" : "shelf 1"
}

“标签”文档没有引用库存中的文档:

{
"_id" : ObjectId("5e7d174fc63ce5b0ca80b89a"),
"nfc" : { "id" : "04:5f:ae:f2:c2:66:81" },
"barcode" : { "code" : "29300310", "type" : "EAN8" }
},
{
"_id" : ObjectId("5e89a1af96d5d8b30aead768"),
"nfc" : { "id" : "04:48:af:f2:c2:66:80" },
"barcode" : { "code" : "29300716", "type" : "EAN8" }
},
{
"_id" : ObjectId("5e7d1756c63ce5b0ca80b89c"),
"nfc" : { "id" : "04:02:ae:f2:c2:66:81" },
"barcode" : { "code" : "29300648", "type" : "EAN8" }
}

由于并非 tags 中的所有文档都在 inventory 文档中使用,因此我不能简单地将它们作为子文档。

现在我需要确定哪些tags 文档被任何inventory 文档引用。我不想维护从 tagsinventory 的反向引用,以免出现不一致的风险(除非这可以由 MongoDB 自动完成?)。

我对 MongoDB 非常陌生,从到目前为止我所了解到的情况来看,我的印象是 View 可能就是我所需要的。但我似乎缺乏适当的搜索词来找到可以帮助我充分理解以继续进行的示例。也许我需要一些不同的东西,我希望您的意见能为我指明正确的方向。

最佳答案

您需要使用 $lookup 执行 MongoDB 聚合允许连接两个集合的运算符。

如果存在“tags文档未被任何inventory文档引用”,join字段将为空数组。

下一步,我们使用 $size 运算符过滤空数组。

尝试下面的查询:

db.tags.aggregate([
{
$lookup: {
from: "inventory",
localField: "_id",
foreignField: "tag",
as: "join"
}
},
{
$match: {
"join": {
$size: 0
}
}
},
{
$project: {
join: 0
}
}
])

tags not referenced | inventory not referenced

关于mongodb - 如何在一个集合中查找未被另一集合中的文档引用的 MongoDB 文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61116699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com