【发布时间】:2018-07-17 10:46:04
【问题描述】:
我正在尝试在 $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} 中获取倒数第三个。
但$cond 与所需的对象不匹配。我曾尝试在$project 之后使用$unwind,但这对我没有帮助。
我在这里做错了什么? 我怎样才能实现我想要做的事情? 任何相关问题也会有所帮助。
【问题讨论】:
-
在项目之前尝试使用 $unwind。然后你就不需要 $reverseArray,不知道你为什么需要它?然后,这会将所有元素从数组中拉出,然后匹配您的 $cond on
-
嗨@N3i1。我需要反转数组。我可以在一个聚合查询中使用 2 个
$project吗?
标签: mongodb mongodb-query aggregation-framework aggregate