Mongo DB聚合阵列大小大于匹配

Pin*_*jee 4 mongodb aggregation-framework

我有一个集合,其中投资是mongodb文档中的一个数组。现在使用聚合,我试图过滤投资长度大于5倍的结果,然后使用匹配查询进行下一个处理。

 Collection{
 _id:000000
 --------------------- 
 "investments" : [      {
          hhhhhhhhhhhhhh 
         },
         {
           hhhhhhhhhhhhhh 
          } }]
-----------------
Run Code Online (Sandbox Code Playgroud)

我像下面这样写的匹配查询不起作用。有什么建议么:

db.companies.aggregate( [
    { $match:  {"founded_year" : 2004}, 
  {  "investments" : {$size: : { $gte: 5 } } }  },
----------------------------------
--------------------------------
]}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lla 11

aggregate

db.companies.aggregate([
  { $match:  { "founded_year":2004 } },
  { $project: { founded_year:1,  
                moreThanFive: { $gt: [ {$size: "$external_links" }, 5 ] } } },
  { $match: { moreThanFive : true }} ,
])
Run Code Online (Sandbox Code Playgroud)

您将需要:
1.包括一个$project阶段,以查找投资数量(size数组的),并检查该投资数量是否大于5。2
.然后执行另一个$match阶段以筛选moreThanFive等于的投资true

find

db.companies.find({'investments.5': {$exists: true}})
Run Code Online (Sandbox Code Playgroud)

您询问investments数组中的位置编号6是否存在。

  • 看起来您的第二个选项(使用 `find`)也适用于聚合中的 $match。由于它看起来像是取消引用,我想它非常快。您仍然会推荐第一种聚合方法吗? (2认同)