首页 > 解决方案 > 在文档中查找、更新并返回一个数组对象(mongodb)

问题描述

我有一堆格式如下的文件:

{
    _id: "5b38c85f213751038ff4d0bb",
    classes: [
      {
        _id: "5b38c85f21375103ytg65ju7",
        standard: "12",
        numberOfStudents: 45
      },
      {
        _id: "5b38c85f2137510370987hgd",
        standard: "11",
        numberOfStudents: 51
      },
    ]
}

我想要:

  1. _id按和特定类的搜索文档集合_id
  2. 更新numberOfStudents那个类。
  3. 仅返回类对象。

所以对于_id: "5b38c85f213751038ff4d0bb"& classes._id: "5b38c85f21375103ytg65ju7",更新numberOfStudents: 43我期望的结果是:

{
  _id: "5b38c85f21375103ytg65ju7",
  standard: "12",
  numberOfStudents: 43
}

我已经尝试了几件事,但它们都返回了整个文档,但不是我想要的方式。

标签: javascriptmongodbmongoose

解决方案


您可以尝试以下聚合

db.collection.aggregate([
  { "$match": { "_id": "5b38c85f213751038ff4d0bb" }},
  { "$addFields": {
    "classes": {
      "$filter": {
        "input": "$classes",
        "as": "class",
        "cond": {
          "$eq": [
            "$$class._id",
            "5b38c85f21375103ytg65ju7"
          ]
        }
      }
    }
  }},
  { "$unwind": "$classes" },
  { "$replaceRoot": { "newRoot": "$classes" }},
  { "$project": {
    "_id": 1,
    "numberOfStudents": { "$literal": 43 },
    "standard": 1
  }}
])

输出

[
  {
    "_id": "5b38c85f21375103ytg65ju7",
    "numberOfStudents": 43,
    "standard": "12"
  }
]

在这里试试


推荐阅读