MongoDB : return 所有子文档的列表

MongoDB : return a list of all subdocument

我正在努力学习Meteor/Mongo,但每次你想进步,一个"simple thing"似乎完全遥不可及...

我有一个非常简单的文档:

_id   : abcd
field : xyz
subdoc [
  {_id: 123, email: abc, name: abc}
  {_id: 234, email: abc, name: xyz}
  {_id: 853, email: abc, name: pmu}
]

我想要 return 我所有子文档的列表。 换句话说,我想在我的 HTML 模板中使用 "each":

得到一个这样的列表
  _id: 123    email: abc    name: abc
  _id: 234    email: abc    name: xyz
  _id: 853    email: abc    name: pmu

但我完全无法用 .dot 符号获得任何结果.. 有什么线索吗?

非常感谢..

myCollection.find({_id: 'abcd'}).fetch().forEach(function(item) { return item.subdoc; });

或使用 findOne

更简单
myCollection.findOne({_id: 'abcd'}).subdoc;

注:

在这 2 种情况下,_id 仅返回一个文档(因为 _id 是唯一的),您将获得子文档数组。

如果您使用第一个解决方案并查询 returns 多个文档,那么您将得到一个数组数组。

如果您想要的是 Arrays of Arrays 中的平面数组,则需要展平该数组

带下划线的

flattened = _.flatten(nestedArray)

如果您使用的是较新版本的 MongoDB (4.x),则可以使用聚合功能。因此,您可以在数据库服务器本身上执行此操作,而不是在 JavaScript 中进行扁平化。

myCollection.aggregate([
    {$unwind : "$subdoc"},
    {$project : {
        _id : 0, 
        id : "$subdoc._id", 
        name : "$subdoc.name", 
        email: "$subdoc.email"
       }
     }
])