Mongodb 根据主文档中的值,仅从子文档中检索某些字段

Mongodb 根据主文档中的值,仅从子文档中检索某些字段,mongodb,Mongodb,我的mongodb中有一个收藏,如下所示 { _id: ObjectId("5fa917baffdd553806e96ca4"), priority: 1, fields: { 1: { id: NumberInt("1"), value: NumberInt("1"), label: "Din 1", dimension: null,

我的mongodb中有一个收藏,如下所示

{
_id: ObjectId("5fa917baffdd553806e96ca4"),
priority: 1,
fields: {
    1: {
        id: NumberInt("1"),
        value: NumberInt("1"),
        label: "Din 1",
        dimension: null,
        valueHuman: "1"
    },
    9: {
        id: NumberInt("9"),
        value: NumberInt("259"),
        label: "",
        dimension: "",
        valueHuman: ""
    }
   }
  }
我要做的是根据优先级的值获取字段 就像我应该得到的那样

{
_id: ObjectId("5fa917baffdd553806e96ca4"),
priority: 1,
fields: {
    1: {
        id: NumberInt("1"),
        value: NumberInt("1"),
        label: "Din 1",
        dimension: null,
        valueHuman: "1"
    }
   }
  }
  • $objectToArray
    字段
    对象转换为数组
  • $filter
    迭代上述转换字段数组的循环并检查字段是否匹配,
    $toInt
    将字符串数转换为整数
  • $arrayToObject
    返回以将数组转换为对象

sir$$this.k does$objectToArray将对象转换为k(键)和v(值)格式,如
[{k:“1”,v:“ABC”…}]
和$$this表示$filter/或临时变量的当前实例,如果您想访问k,如果我想用$$this来表示某个值,因为在我的realdatabase中,字段的子文档列是io1 ETC无法准确获取您能否提供实际和预期的文档。先生,请检查我的Edied问题我没有针对列的字符串,但有一个对象
db.collection.aggregate([
  {
    $addFields: {
      fields: {
        $arrayToObject: {
          $filter: {
            input: { $objectToArray: "$fields" },
            cond: {
              $eq: [{ $toInt: "$$this.k" }, "$priority"]
            }
          }
        }
      }
    }
  }
])