Mongodb 用 $cond 和 $each 聚合 $push

use*_*780 6 mongoose mongodb node.js express 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,
              }
            }
          }
        }
      },
    ]
  )
  ...
Run Code Online (Sandbox Code Playgroud)

是 Mongo DB 现在没有为此设置,还是我认为这一切都错了?

zan*_*ngw 5

请在没有$each如下情况的情况下尝试

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


sri*_*asy 5

提供的答案将起作用,但每当块执行时它们都会添加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
        }
    }]);
Run Code Online (Sandbox Code Playgroud)

参考: $条件