MongoDB散列对象投影

q35jwt9p  于 2023-02-11  发布在  Go
关注(0)|答案(1)|浏览(128)

如果存在具有未知键的对象:

{
  data: {
    someObjectIdStringThatCantBePutInProjection: {
      dontReturn: 123,
      return: 321
    },
    someOtherObjectIdStringThatCantBePutInProjection: {
      dontReturn: 1234,
      return: 4321
    }
  }
}

我希望MongoDB只返回对象的return属性,投影看起来会是什么样子?
例如投影

{
  data: { **allProperties**: { return: 1 } }
}

应返回:

{
  data: {
    someObjectIdStringThatCantBePutInProjection: {
      return: 321
    },
    someOtherObjectIdStringThatCantBePutInProjection: {
      return: 4321
    }
  }
}
66bbxpm5

66bbxpm51#

使用动态值作为字段名被认为是一种反模式,会给查询带来不必要的复杂性。不过,您可以通过$objectToArray将数据对象转换为k-v元组数组。使用$map仅获取所需的return字段。最后,使用$arrayToObject恢复为原始形式。

db.collection.aggregate([
  {
    "$set": {
      "data": {
        "$map": {
          "input": {
            "$objectToArray": "$data"
          },
          "as": "d",
          "in": {
            k: "$$d.k",
            v: {
              return: "$$d.v.return"
            }
          }
        }
      }
    }
  },
  {
    "$set": {
      "data": {
        "$arrayToObject": "$data"
      }
    }
  }
])

Mongo Playground

相关问题