首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在匹配条件下从mongodb获取数据

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

Stack Overflow用户
提问于 2021-09-03 09:58:50
回答 1查看 89关注 0票数 0

我有数据。

条件是:有效的home计数>0(有效的home意味着删除,不为真)

代码语言:javascript
运行
复制
{
    "_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,无效home = 2,所以有效家庭计数是4-2 = 2,它大于0。-> match

"_id":889g45,它是总归属计数= 2,无效home = 2,所以有效家庭计数是2-2 = 0,它等于0。->不匹配

因此,如果数据匹配条件(意味着有效的主计数>0)。

如何使用mongodb来实现我的目标?

顺便说一句,我的设备数量可能有数万台,因此,如果使用解卷,群.

它可能会超过内存限制。奥兹。

我希望当我写命令:db.colletion_name.find(.),

我会得到数据:

代码语言:javascript
运行
复制
{
    "_id": 998e58,
  "home": [
    {
     "home_id": 488742,
     "deleted": ""
    },
    {
     "home_id": 481125,
    },
 ]
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 11:47:29

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

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

在此之后,我们使用大小大于0的match文档

然后project来创建预期的输出

代码语言:javascript
运行
复制
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"
      }}
  ])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69043042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档