在匹配条件下从 mongodb 获取数据

get data from mongodb in match condition

我有数据。
条件是:有效家庭数 > 0(有效家庭意味着删除不正确)

{
    "_id": 998e58,
  "home": [
    {
     "home_id": 433667,
     "deleted": true
    },
    {
     "home_id": 488742,
     "deleted": ""
    },
    {
     "home_id": 479331,
     "deleted": true
    },
    {
     "home_id": 481125,
    },
 ]
},
{
    "_id": 889g45,
  "home": [
    {
     "home_id": 934456,
     "deleted": true
    },
    {
     "home_id": 978646,
     "deleted": true
    },
 ]
},

因为:
“_id”:998e58,它的总家数 = 4,无效家 = 2,所以有效家数是 4-2 = 2,它大于 0。 --> match
“_id”:889g45,它的总家数 = 2,无效家数 = 2,因此有效家数为 2-2 = 0,等于 0。 --> 不匹配

所以,如果数据符合条件(意味着有效家庭计数>0)。
如何使用 mongodb 条件来实现我的目标?
顺便说一句,我的设备可能有几万个,所以如果使用unwind,groupby...
它可能会超过内存限制。 ORZ.

我希望当我写命令时:db.colletion_name.find(...),
我将获取数据:

{
    "_id": 998e58,
  "home": [
    {
     "home_id": 488742,
     "deleted": ""
    },
    {
     "home_id": 481125,
    },
 ]
}

首先我们使用filter查找所有删除的元素不正确

然后我们addFields 将 newHome 数组的大小添加为数字

然后我们 match 文档大小 > 0

然后project创建预期输出

db.collection_name.aggregate([
      {
          $project:{
              newHome:{
              $filter :{
                  input:"$home",
                  as:"z",
                  cond:{$ne:["$$z.deleted",true]}
              }
          }
        }
      },
      {
          $addFields:{
              numOfActive : {$size:"$newHome"}
          }
      },
      {
          $match:{numOfActive:{$gt:0}}
      },
      {project:{
          _id:1,
          home:"$newHome"
      }}
  ])