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 查找与聚合匹配返回一个空数组

如何通过聚合连接mongoDB中的两个表并需要根据匹配获取结果[重复]

mongodb 聚合 - 匹配 $nin 数组正则表达式值

为啥在与数组中的字段匹配时,mongoDB聚合中的查找中的管道不起作用?

Mongodb聚合计数数组/集合大小

如何在mongodb中找到数组大小大于1的文档