Mongodb聚合数组大小大于匹配[重复]
Posted
技术标签:
【中文标题】Mongodb聚合数组大小大于匹配[重复]【英文标题】:Mongo DB aggregation array size greater than match [duplicate] 【发布时间】:2018-07-28 14:29:48 【问题描述】:我有一个集合,其中投资是 mongodb 文档中的一个数组。现在使用聚合,我试图过滤投资长度超过 5 倍的结果,然后使用匹配查询进行下一个处理。
Collection
_id:000000
---------------------
"investments" : [
hhhhhhhhhhhhhh
,
hhhhhhhhhhhhhh
]
-----------------
我在下面写的匹配查询不起作用。任何建议:
db.companies.aggregate( [
$match: "founded_year" : 2004,
"investments" : $size: : $gte: 5 ,
----------------------------------
--------------------------------
]
【问题讨论】:
看看这个helps 你可以在3.6中使用db.companies.find("$expr":"$and":["$eq":["$founded_year", 2004], "$gte":["$size":"$investments", 5]])
【参考方案1】:
与aggregate
:
db.companies.aggregate([
$match: "founded_year":2004 ,
$project: founded_year:1,
moreThanFive: $gt: [ $size: "$external_links" , 5 ] ,
$match: moreThanFive : true ,
])
您需要:
1.包含一个$project
阶段,查找投资数量(数组的size
),并检查是否大于5。
2. 然后再做一个$match
阶段来过滤moreThanFive
等于true
的那些。
与find
:
db.companies.find('investments.5': $exists: true)
你问investments
数组中的位置号6是否存在。
【讨论】:
看起来你的第二个选项(find
)也适用于聚合中的 $match。由于它看起来像取消引用,我想它非常快。你还会推荐第一种聚合方法吗?以上是关于Mongodb聚合数组大小大于匹配[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何通过聚合连接mongoDB中的两个表并需要根据匹配获取结果[重复]