在"医院"Collection 中,有医院每个部门的文件.每个文件都有详细信息,如科室名称、分配给该科室的doctor 和护士.文档 struct 如下所示:

{
    "department": "emergency_care",
    "doctors": ["d1", "d2", "d3"],
    "nurses": ["n1", "n2", "n3", "n4", "n5"]
},
{
    "department": "child_health",
    "doctors": ["d4", "d5"],
    "nurses": ["n6"]
},
{
    "department": "first_aid_room",
    "nurses": ["n7", "n8"]
}

如何计算住院总人数,这是所有科室所有doctor 和护士的总和.

预期输出:13

推荐答案

您可以try 以下查询:

  • 第一组全部(使用_id: null)获得doctor 和护士的总数.
  • 如果值不是数组,则此处使用$cond$sum 0,否则使用数组大小.
  • 然后使用$project级输出这两个值的总和.
db.collection.aggregate([
  {
    "$group": {
      "_id": null,
      "totalDoctors": {
        "$sum": {
          "$cond": {
            "if": {"$isArray": ["$doctors"]},
            "then": {"$size": "$doctors"},
            "else": 0
          }
        }
      },
      "totalNurses": {
        "$sum": {
          "$cond": {
            "if": {"$isArray": ["$nurses"]},
            "then": {"$size": "$nurses"},
            "else": 0
          }
        }
      }
    }
  },
  {
    "$project": {
      "_id": 0,
      "nPersons": {
        "$add": ["$totalDoctors","$totalNurses"
        ]
      }
    }
  }
])

here

Mongodb相关问答推荐

没有文档的MongoDB集合中的不一致,但当我执行count()时,它告诉我有15个文档

MongoDB DB参考返回null值

在延迟函数中重用 context.WithTimeout

Mongo:查找具有 0 个关联文档的文档,成本更低

如何修改 mongodb 中嵌套对象数组中的字段名称/键?

$group 和 sum + 添加所有大于

在亚马逊 EC2 上托管 nodeJS/mongoose Web 应用程序

Spring Data + MongoDB GridFS 可以通过 Repository 访问吗?

将 MongoDB 转移到另一台服务器?

哪个库最适合用于带有 Scala 的 MongoDB?

如何使用 mongoose 从 MongoDb 获取数据?

MongoDB:按标签获取文档

Mongoose 和新架构:返回ReferenceError: Schema is not defined

如果我在 MongoDB 上使用 LINQ,为什么会失go 性能?

MongoDB - 聚合 - 获取数组中的唯一项

当前的 URL 字符串解析器已弃用

填充mongoose后查找

MongoDB 引用的最佳实践

聚合 $lookup 匹配管道中文档的总大小超过最大文档大小

MissingSchemaError:Schema hasn't been registered for model