Mongodb 用 $cond 和 $each 聚合 $push
Posted
技术标签:
【中文标题】Mongodb 用 $cond 和 $each 聚合 $push【英文标题】:Mongodb aggregate $push with $cond and $each 【发布时间】:2016-05-30 04:07:42 【问题描述】:我试图在聚合$group
期间使用$cond
有条件地将$push
多个整数放到数字数组中,但没有任何成功。这是我的代码:
Item.aggregate(
[
$group:
_id: "$_id",
numbers:
$push:
$cond:
if: $gt: [ "$price.percent", 70 ] ,
then: $each: [10,25,50,70] ,
else: null,
,
]
)
...
Mongo DB 是不是现在没有为此设置,还是我看错了?
【问题讨论】:
【参考方案1】:请尝试不使用$each
,如下所示
Item.aggregate(
[
$group:
_id: "$_id",
numbers:
$push:
$cond:
if: $gt: [ "$price.percent", 70 ] ,
then: [10,25,50,70] ,
else: null,
]);
【讨论】:
嗨@zangw,感谢您的回复!这就是我最终要做的事情,但后来我不得不做两次 $unwind 来解开我的数组数组。这是有条件地将多个项目推送到数组的唯一方法吗? 是的,这就是我害怕的。哦,那也行。谢谢!我会把你标记为正确的【参考方案2】:提供的答案将起作用,但只要执行else
块,它们就会将null
添加到数组中,最后您需要从实际数组(numbers
)中过滤掉null
值,即一个额外的步骤!
您可以使用 $$REMOVE 有条件地排除 MongoDB 的 $project
中的字段。
Item.aggregate(
[
$group:
_id: "$_id",
numbers: $push: $cond: [ $gt: ["$price.percent", 70] , [10, 25, 50, 70], '$$REMOVE'] // With $$REMOVE nothing happens on else
]);
参考: $cond
【讨论】:
【参考方案3】:你试过了吗:
Item.aggregate(
[
$group:
_id: "$_id",
numbers:
$push:
$each:
$cond:
if: $gt: [ "$price.percent", 70 ] ,
then: [10,25,50,70],
else: null
,
]
)
【讨论】:
以上是关于Mongodb 用 $cond 和 $each 聚合 $push的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 $eq 和 $cond 替换 mongodb 中的字符串
MongoDB,如何将查找和排序与聚合中的 $cond 结合起来?
MongoDB,如何将查找和排序与聚合中的 $cond 结合起来?
带有 $cond 的 MongoDB 聚合管道 $addFields - 无法使用变量