数组中字段的最小值和数组mongodb聚合查询中的第一个对象

Posted

技术标签:

【中文标题】数组中字段的最小值和数组mongodb聚合查询中的第一个对象【英文标题】:min value of field in array and 1st object in array mongodb aggregation query 【发布时间】:2016-01-24 13:12:51 【问题描述】:

让我使用以下伪示例来更好地解释我的需求。

我有一群人和一些属于组模式的图像


  images:['ARRAY OF IMAGES'],
  members:[
    age:NUMBER,
    name:STRING, 
    email:EMAIL_OF_MEMBER
  ], 
  groupName:String
  ....etc

现在我有一个聚合查询

group.aggregate([
  
    $project:
       //some code happening to support query in the below $match
       'original':$$ROOT
    
  ,
  
    $match://some query code happening and all params from $project above will be available here.  the $original field contains all fields of document
  ,
  
    //Now i want to extract 1st image from Images array, Min and Max age of members in group.
  
],function(err,results)//dosomething with results)

如果我不使用第三个管道,我将获得我不需要的整个文档。我只需要一组人的 1 张图片和最小最大年龄来显示网页。我不需要其他细节。

【问题讨论】:

【参考方案1】:

查询的以下部分将为您提供第一张图片以及成员的最小和最大年龄。

db.[collection].aggregate([
                             
                              $unwind : "$members" 
                            ,
                             
                              $group : 
                                      _id: "$_id" , 
                                       images :  $first: "$images",
                                       minAge : $min : "$members.age",
                                       maxAge : $max: "$members.age"
                                     
                            
                          ]).pretty();

mongoDb Version 3.1.6及以上版本,可以在聚合管道中使用$Slice来限制数组的内容。

db.[collection].aggregate([
                             
                              $unwind : "$members" 
                            ,
                             
                              $group : 
                                      _id: "$_id" , 
                                       images : $push : "$images",
                                       minAge : $min : "$members.age",
                                       maxAge : $max: "$members.age"
                                     
                            ,
                             
                              $project : 
                                        images : 
                                            images :$slice:1 
                                       ,
                                       minAge : 1 ,
                                       maxAge  : 1
                           
                         ]).pretty();

【讨论】:

以上是关于数组中字段的最小值和数组mongodb聚合查询中的第一个对象的主要内容,如果未能解决你的问题,请参考以下文章

使用聚合重命名 MongoDB 中的字段

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

MongoDB在具有附加字段的对象数组上聚合$lookup

MongoDB在具有附加字段的对象数组上聚合$lookup

$eq 内部过滤器不适用于数组字段 - Mongodb

MongoDB 查询聚合 localField ObjectId 字符串和外部字段 ObjectId