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

安迪

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

该数据库包含两个集合,inventory并且tags,其中的一些(不是全部)在文件inventory中引用一个tags文件:

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

“标签”文件不涉及以下任何文件inventory

{
    "_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文档引用我希望不必维护从tags到的引用inventory,以免出现不一致的风险(除非MongoDB可以自动完成此操作?)。

我是MongoDB的新手,到目前为止,我已经了解到可能是我需要的一种视图。但是我似乎缺乏合适的搜索词来查找示例,这些示例可以帮助我理解足够的内容以继续进行操作。也许我需要一些不同的东西,在这里我希望您的意见能为我指明正确的方向。

瓦利洪

您需要使用$ 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未引用| inventory未引用

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据另一个集合中存储的数组过滤Firestore中的文档?

mongodb将文档从一个集合移到另一个集合

MongoDB如何在一个集合中订购其文档?

MongoDB:如何为集合中的每个文档设置一个新字段,该字段等于另一个字段的值

在Firestore中创建一个文档,其中包含对另一个集合中现有文档的引用

如何获取包含另一个集合中的键的文档计数

如何获取Firebase中另一个集合的文档中的集合

如何使用另一个集合Moongoose查找子查询文档

如何删除一个集合中的引用文档及其从另一个引用集合中的记录

每个文档的mongodb检索其字段+通过引用在另一个集合中的ID计数

如何用猫鼬中另一个集合的文档填充文档的字段时查询文档?

如何在mongodb中的另一个文档中过滤文档的字段?

Mongo DB:如何从一个集合中复制文档并将其作为字段添加到另一个集合中的相关文档中?

如何获取另一个集合中引用的MongoDB文档的列表

如何查找一个dstore集合中而不是另一个dstore集合中的项目?

MongoDB /节点:将集合中的一部分文档插入另一个集合中的文档

MongoDB-插入两个集合,一个集合引用另一个集合作为子文档

如何在文档Xcode中添加到另一个方法的链接/引用?

根据另一个集合中的值从集合中删除文档

MongoDB:在一个文档中获取所有集合

如何遍历 mongodb 集合中的所有文档,一次一个文档?

如何在另一个集合中拥有一个集合?

用于在另一个集合中的文档中查找数据的 Firestore 匹配规则

如何对一个集合中多个文档的值求和并将总和推送到另一个集合中的文档

如何在 mongoDB 中查询每个文档的另一个集合

打字稿:如何在本文档中引用另一个文档的字段?

如何使用mongodb中主集合的objectID在另一个集合中查找

如何在firebase中从一个集合访问另一个集合

mongoDB 从一个集合中查找并保存在另一个集合中