如何在mongoDB中find第n个嵌套级别的对象? (单一collections,单一文件)

我正在试图find使用'_id',这是在同一个文件中的第n个对象。

任何build议或参考或代码示例将不胜感激。

(例如)

文档将如下所示:

{ "_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": [] }] }] }] } 

口袋里应该放更多的口袋,而且是dynamic的。

在这里,我想使用“_id”来search“pocket”,如“xxx123456”,但是不使用静态引用。

再次感谢。

我强烈build议您将文档结构更改为更易于pipe理/search的内容,因为这样做只会变得非常麻烦。

为什么不使用多个集合,就像在这个答案中解释的?

所以,一个简单的方法来思考这个情况,我希望你能更容易推理,而不是放弃一些模式代码。

  1. 将所有的东西作为孩子存储在同一个文档中。 给他们独特的_id s。
  2. 将所有的pocket的东西都collections起来。 collections品只保存通常在口袋里的所有id (而不是自己引用口袋)。

这样一来,很多工作都可以在数据库调用之外进行。 您只需在需要的时候批量拖出所需的项目,而不是search嵌套的文档!

但是,如果您可以使用整个文档:
看起来你想要做一个recursionsearch一定数量的深层次。 我会用一些伪代码给你一个总体的想法,希望你能把其余的东西弄清楚。

说你的function将是:

 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`. **/ } 

这是一般的想法。 有一个更清洁,recursion的方法来做到这一点,你调用SearchNDeep,同时传递一个数字,你有多深,基本情况下没有更多的水平去,或find的对象。

记住如果你没有find它,返回falseundefined如果你这样做的话,返回正确的对象! 祝你好运!