mongodb - Mongodb如何在tree中找到孤儿?

我有 trees 集合,其中的对象具有类似 tree 的结构。我实际上使用的是 https://www.mongodb.com/docs/manual/tutorial/model-tree-structures-with-child-references/ ,但在我的情况下,每个 tree 的深度是未定义的 - 它可能在 [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 集合中没有链接:

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

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

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

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

回答1

根据最新版本的 https://www.mongodb.com/docs/manual/reference/limits/#mongodb-limit-Nested-Depth-for-BSON-Documents

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 不适合此架构。因此,您无法通过大量动态级别的深度嵌套数组来实现这一点。

您可以更改架构或数据 store。

相似文章

java - 连接MongoDB

早上好。我在连接到MongoDB数据库时遇到问题。我在docker-compose.yml文件中为自己配置了一个数据库和mongoexpress。使用CommandLineRunner,我想将示例数据...

java - 在二叉搜索树中实现 nodeCount() 和 leafCount()

我正在尝试为这个递归二叉树程序实现leafCount()和nodeCount()。在测试它时,这两种方法(或它们的测试)会抛出失败,所以很明显它们没有按预期工作。我无法弄清楚我在哪里做错或想错了。如果...

最新文章