Mongodb用$ cond和$ each汇总$ push

时间:2016-02-18 05:54:57

标签: node.js mongodb express mongoose mongodb-query

我正在尝试使用$cond在聚合$push期间有条件地$group多个整数到数字数组上而没有任何成功。这是我的代码:

Item.aggregate(
    [
      {
        $group: {
          _id: "$_id",
          numbers: {
            $push: {
              $cond: { 
                if: { $gt: [ "$price.percent", 70 ] }, 
                then: { $each: [10,25,50,70] },
                else: null,
              }
            }
          }
        }
      },
    ]
  )
  ...

Mongo DB现在还没有为此设置,或者我看到这一切都错了吗?

3 个答案:

答案 0 :(得分:3)

请在没有 if var tabBarController = self.viewControllers { let indexToRemove = 2 if indexToRemove < tabBarController.count { tabBarController.removeAtIndex(indexToRemove) self.setViewControllers(tabBarController, animated: false) } } 的情况下试用,如下所示

$each

答案 1 :(得分:0)

你试过了吗:

Item.aggregate(
    [
      {
        $group: {
          _id: "$_id",
          numbers: {
            $push: {
              $each: { 
                $cond: { 
                  if: { $gt: [ "$price.percent", 70 ] }, 
                  then: [10,25,50,70],
                  else: null
                }
              }
            }
          }
        }
      },
    ]
  )

答案 2 :(得分:0)

提供的答案会起作用,但只要执行 null 块,它们就会将 else 添加到数组中,最后您需要从实际数组中过滤掉 null 值( numbers) 这是一个额外的步骤!

您可以使用 $$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