Mongodb,Aggregate - 如何使用$ reverseArray然后在返回的数组上使用$ cond?

时间:2018-02-07 08:11:10

标签: mongodb mongodb-query aggregation-framework aggregate

我想在$ project下一起使用$ reverseArray和$ cond。 但$ cond下的条件不起作用。我有一个对象数组,我想首先反转,然后应用一些条件。

示例数据库:

{
    _id : 1,
    arr:[
       {name : 'a',cf:0 , num : 1},
       {name : 'b',cf:1, , num : 1},
       {name : 'b',cf:0, , num : 2},
       {name : 'a',cf:1, , num : 2},
       {name : 'a',cf:0, , num : 3},
       {name : 'b',cf:1, , num : 3},
       {name : 'a',cf:1, , num : 4}
    ]
}

我正在尝试使用查询:

 [
   {
       $project:{reverseArr : {$reverseArray:arr},
                 query1:{$cond :
                 {
                  $if : {
                   $and: [
                    {$eq: ['$reverseArr.name', 'a']},
                    {$eq: ['$reverseArr.cf', 0]}
                   ]
                  },then: 1,else: 0
             }}
        }
   }
 ]

因此,通过使用上面的查询,我希望从数组{name : 'a',cf:0, , num : 3}的末尾获得第3个。

$cond与所需对象不匹配。我在$unwind之后尝试使用$project,但这对我没有帮助。

我在这里做错了什么? 我怎样才能实现我想做的事情? 任何相关问题也会有所帮助。

1 个答案:

答案 0 :(得分:1)

如果您需要使用$reverseArray,请尝试:

 [
   { $project:{reverseArr : {$reverseArray:arr} },
   { $unwind : “reverseArr” },
   { $project:{ query1:{$cond :
             {
              $if : {
               $and: [
                {$eq: ['$reverseArr.name', 'a']},
                {$eq: ['$reverseArr.cf', 0]}
               ]
              },then: 1,else: 0
         }}
    }
 ]