MongoDB - 仅投影数组中的匹配元素
Posted
技术标签:
【中文标题】MongoDB - 仅投影数组中的匹配元素【英文标题】:MongoDB - Project only the matching element in an array 【发布时间】:2018-11-19 04:03:36 【问题描述】:如何从 Mongo 文档的数组中获取一个具有以下结构的元素:
array : [
type: 'cat', name: 'George'
type: 'cat', name: 'Mary'
type: 'dog', name: 'Steve'
type: 'dog', name: 'Anna'
]
例如我需要得到史蒂夫,在这种情况下结果必须是这样的:
array : [
type: 'dog', name: 'Steve'
]
左右:type: 'dog', name: 'Steve'
我知道如何在发布时制作它,但我需要在整个数组可用的客户端制作它,我可以使用 forEach 从数组中返回这个值,但我正在寻找更优雅的方式(使用 Mongo 查询)。
【问题讨论】:
Retrieve only the queried element in an object array in MongoDB collection的可能重复 【参考方案1】:使用位置运算符($
)仅投影第一个匹配的子文档。
db.t.find("array":"type":"dog", "name":"Steve","array.$":1)
使用meteor
,您必须坚持聚合,因为positional
运算符不起作用:
db.t.aggregate([
$match:"array.type":"dog","array.name":"Steve",
$unwind:"$array",
$match:"array.type":"dog","array.name":"Steve"
])
【讨论】:
在服务器端查询看起来像你的确实返回具有匹配元素的数组,但在客户端(minimongo)他们返回整个数组。 不确定问题 - github.com/meteor/meteor/issues/153 是否仍然存在。如果是,您必须遍历所有子文档,如 - ***.com/questions/27951102/… @experd - 你可能需要坚持aggregating
的结果,在minimongo
。请参阅我的更新答案。
抱歉回复晚了。聚合对我有用,但它只有服务器端实现并且是非反应性的。以上是关于MongoDB - 仅投影数组中的匹配元素的主要内容,如果未能解决你的问题,请参考以下文章