Mongodb 仅当条件满足时才推

Mongodb 仅当条件满足时才推,mongodb,Mongodb,总之,我有一个集团条款: { $group: { _id: { town_id: "$_id.town" }, houses_data: { $push: { house_id: "$_id.house_id", price: { $divide: ["$sum", "$total"]

总之,我有一个集团条款:

  {  $group: {
            _id: { town_id: "$_id.town" },
            houses_data: { $push:

                 { house_id: "$_id.house_id",
                   price: {
                       $divide: ["$sum", "$total"]
                         }
                  }
            }
         }
   }
输出如下所示:

现在我想限制
houses\u数据的输出

仅适用于
房屋id>3
的条目

我想要这个输出:

在推送到数组之前,我尝试添加一个条件:

             houses_data: { 
               if: {
                  "$_id.house_id": {$gt: 3}
               },
               then: {
                 $push:
                   { house_id: "$_id.house_id",
                     price: {
                       $divide: ["$sum", "$total"]
                         }
                   }
               }
            }

但它不起作用!我错了什么?谢谢

您可以尝试如下所示的$match

{
$match:{_id.house_id :  {$gt: 3}}, 

$group: {
            _id: { town_id: "$_id.town" },
            houses_data: { $push:

                 { house_id: "$_id.house_id",
                   price: {
                       $divide: ["$sum", "$total"]
                         }
                  }
            }
         }
   }
嗯,


Sandepkumar Gupta

您能发布您的样本文档吗?
             houses_data: { 
               if: {
                  "$_id.house_id": {$gt: 3}
               },
               then: {
                 $push:
                   { house_id: "$_id.house_id",
                     price: {
                       $divide: ["$sum", "$total"]
                         }
                   }
               }
            }
{
$match:{_id.house_id :  {$gt: 3}}, 

$group: {
            _id: { town_id: "$_id.town" },
            houses_data: { $push:

                 { house_id: "$_id.house_id",
                   price: {
                       $divide: ["$sum", "$total"]
                         }
                  }
            }
         }
   }