MongoDB:返回所有子文档的列表
Posted
技术标签:
【中文标题】MongoDB:返回所有子文档的列表【英文标题】:MongoDB : return a list of all subdocument 【发布时间】:2016-04-26 23:04:40 【问题描述】:我正在努力学习 Meteor/Mongo,但每次你想进步时,“简单的事情”似乎完全遥不可及......
我有一个非常简单的文档:
_id : abcd
field : xyz
subdoc [
_id: 123, email: abc, name: abc
_id: 234, email: abc, name: xyz
_id: 853, email: abc, name: pmu
]
我想返回我所有子文档的列表。 换句话说,我想在我的 html 模板中使用“each”得到一个这样的列表:
_id: 123 email: abc name: abc
_id: 234 email: abc name: xyz
_id: 853 email: abc name: pmu
但我完全无法使用 .dot 表示法获得任何结果.. 有什么线索吗?
非常感谢..
【问题讨论】:
您正在处理的查询是什么? 您是否尝试过打印响应正文?或者使用任何打印语句?db.collection.findOne(, 'subdoc': 1, '_id': 0 )
或 db.collection.find(, 'subdoc': 1, '_id': 0 )
取决于你想要什么。
【参考方案1】:
myCollection.find(_id: 'abcd').fetch().forEach(function(item) return item.subdoc; );
使用 findOne 甚至更简单
myCollection.findOne(_id: 'abcd').subdoc;
注意:
在这 2 种情况下,_id
仅返回一个文档(因为 _id 是唯一的)您将获得 subdoc 数组。
如果您使用第一种解决方案并且您的查询返回多个文档,那么您将获得一个数组数组。
如果您想要的是来自 Arrays 数组的平面数组,则需要展平该数组
带下划线的就是
flattened = _.flatten(nestedArray)
【讨论】:
有很多延迟,抱歉。它就像一个魅力......谢谢。顺便说一句,如果我想检索嵌套文档中的特定字段,最简单的方法是什么? 使用array.map(function(item)return item.field)【参考方案2】:如果您使用的是较新版本的 MongoDB (4.x),则可以使用聚合功能。因此,您可以在数据库服务器本身上执行此操作,而不是在 javascript 中进行扁平化。
myCollection.aggregate([
$unwind : "$subdoc",
$project :
_id : 0,
id : "$subdoc._id",
name : "$subdoc.name",
email: "$subdoc.email"
])
【讨论】:
以上是关于MongoDB:返回所有子文档的列表的主要内容,如果未能解决你的问题,请参考以下文章