Mongo DB如何在树中找到孤儿?

Mongo DB how to find orphans in a tree?

我有 trees 集合,其中包含具有树状结构的对象。我实际上使用的是 child references pattern,但在我的例子中,每棵树的深度是未定义的——它可能在 [0:100] 范围内,大约是:

{
  "_id": "tree1",
  "tag_id": "1",
  "children": [
    {
      "_id": "tree2",
      "tag_id": "2",
      "children": [
        {
          "_id": "tree3",
          "tag_id": "3"
        }
      ]
    },
    {
      "_id": "tree4",
      "tag_id": "4"
    }
  ]
}

我还有一个简单的 tags 集合,其中包含以下对象:

[
  {
    "_id": "1",
    "name": "one"
  },
  {
    "_id": "2",
    "name": "two"
  },
  {
    "_id": "3",
    "name": "three"
  },
  {
    "_id": "4",
    "name": "four"
  },
  {
    "_id": "5",
    "name": "five"
  }
]

如您所见,我有一个孤儿 (5),它在 trees 集合中没有 link:

{
    "_id": "5",
    "name": "five"
}

我想找到所有这些孤儿并将它们从 tags 集合中删除。 我尝试将 aggregate 方法与 $lookup:

一起使用
db.tags.aggregate(
 [
  {$lookup:
    {
        from: "trees",
        localField: "_id",
        foreignField: "tag_id",
        as: "matched_docs"
    }
 }
 ]
);

但是这种方法加入并仅查找“顶部”连接而不查看子数组。 如何使用 mongo 查询解决任务?也许,使用不同的数据结构、模式或其他聚合方法会更好?

根据最新版本documentation

Nested Depth for BSON Documents

MongoDB supports no more than 100 levels of nesting for BSON   
documents. Each object or array adds a level.

Mongodb 不适合此架构。因此,您无法通过深度嵌套数组的巨大动态级别来实现这一点。

您可以更改架构或数据存储。