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"
}
}
])
我正在努力学习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"
}
}
])