Node.js 如何在mongoDB中找到第n个嵌套级别的对象?(单个集合,单个文档)

Node.js 如何在mongoDB中找到第n个嵌套级别的对象?(单个集合,单个文档),node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试使用同一文档中的“\u id”查找第n个对象 如有任何建议、参考或代码示例,将不胜感激 (例如) 文件如下所示: { "_id": "xxxxx", "name": "One", "pocket": [{ "_id": "xxx123", "name": "NestedOne", "pocket": [] }, { "_id": "xxx1234", "name": "Nes

我正在尝试使用同一文档中的“\u id”查找第n个对象

如有任何建议、参考或代码示例,将不胜感激

(例如)

文件如下所示:

{
    "_id": "xxxxx",
    "name": "One",
    "pocket": [{
        "_id": "xxx123",
        "name": "NestedOne",
        "pocket": []
    }, {
        "_id": "xxx1234",
        "name": "NestedTwo",
        "pocket": [{
            "_id": "xxx123456",
            "name": "NestedTwoNested",
            "pocket": [{"_id": "xxx123666",
                "name": "NestedNestedOne",
                "pocket": []
            }]
        }]
    }]
}
口袋应能容纳更多的口袋,并且是动态的

在这里,我想使用“_id”搜索“pocket”,比如“xxx123456”,但不使用静态引用


再次感谢。

我强烈建议您将文档结构更改为更易于管理/搜索的结构,因为这只会让您更加痛苦。

为什么不使用多个集合,如中所述

因此,对于您的情况来说,这是一种简单的思考方法,我希望这比删除一些模式代码更容易进行推理

  • 将所有内容作为子对象存储在同一文档中。给他们唯一的
    \u id
    s
  • 将其
    口袋中的所有内容存储为收藏。这些集合只包含通常位于口袋内的所有
    id
    s(而不是参考口袋本身)
  • 这样,很多工作都可以在DB调用之外进行。您只需在需要时批量取出所需的项目,而不是搜索嵌套文档

    但是,如果您可以处理整个文档:
    看起来您想在一定深度的层次上进行递归搜索。我将用一些伪代码给您一个大致的想法,希望您能够理解其余的部分

    假设您的功能是:

    function SearchNDeep(obj, n, id){
      /**
      You want to go down 1 level, to pocket
      see if pocket has any things in it. If so:
      Check all of the things...for further pockets...
    
      Once you've checked one level of things, increment the counter.
      When the counter reaches the right level, you'd want to then see if the object you're checking has a `'_id'` of `id`.
    **/
    }
    
    这是总的想法。有一种更简洁、递归的方法可以做到这一点,您可以调用SearchNDeep,同时传递一个数字表示您有多深,基本情况是没有更多的级别,或者找到了对象


    如果找不到,请记住返回
    false
    undefined
    ,如果找到,请返回正确的对象!祝你好运

    很难更新嵌套的动态键,并且将数据保持在太嵌套的状态不是很好的做法。查看完您的文档后,我不明白您为什么要将
    口袋放在口袋里的口袋里…
    是更改文档结构然后使用更新的更好方法