如何在不删除其余对象的情况下仅返回对象数组中的一个字段

时间:2019-05-14 18:57:01

标签: mongodb mongoose mongodb-query

我正在查询一个集合,并且在那个集合中我有一个对象数组。在该数组中,我想使用投影仅在每个对象中返回一个字段。但是,我不想删除该对象之外的所有数据。

假设集合中的一个文档看起来像这样

{
  "a": "some val",
  "b": "some other val",
  "c": [
    {
      "d": "some array val",
      "e": "some other array val"
    }
  ]
}

假设我要删除数组中除“ d”之外的所有字段并以

结尾
{
  "a": "some val",
  "b": "some other val",
  "c": [
    {
      "d": "some array val",
    }
  ]
}

我尝试过:

db.collection.find({}, { "c.d": 1 })

但是这也删除了“ a”和“ b”并返回:

{
  "c": [
    {
      "d": "some array val",
    }
  ]
}

我也不能:

db.collection.find({}, { "c.e": 0 })

因为“ e”以外可能还有其他字段,因此也应将其隐藏。

1 个答案:

答案 0 :(得分:1)

您可以运行$addFields覆盖现有字段,运行$map转换c数组并仅获取d值,请尝试:

db.collection.aggregate([
    {
        $addFields: {
            c: {
                $map: {
                    input: "$c",
                    in: { d: "$$this.d" }
                }
            }
        }
    }
])