【问题标题】:Accessing a random field using other field value使用其他字段值访问随机字段
【发布时间】:2020-11-02 21:06:14
【问题描述】:

我有这样的文件:

{
    value: "field2",
    field1: [ ... ],
    field2: [ ... ],
    ...
}

其中 value 将是文档中某个字段的值。一个文档可以有许多不同的字段。

我想匹配一个文档。仅获取相关字段,然后对其进行一些计算。

例如我想做的:

{
  $unwind: "$value"
}

并得到field2 展开的结果。 我该怎么做?

【问题讨论】:

    标签: mongodb mongoose mongodb-query aggregation-framework aggregate


    【解决方案1】:

    这有点“hacky”,但您可以使用像 $objectToArray$filter 这样的运算符来实现这一点:

    db.collection.aggregate([
      {
        $addFields: {
          "values": {
            $arrayElemAt: [
              {
                $filter: {
                  input: {
                    $objectToArray: "$$ROOT"
                  },
                  as: "field",
                  cond: {
                    $eq: [
                      "$$field.k",
                      "$value"
                    ]
                  }
                }
              },
              0
            ]
          }
        }
      },
      {
        $unwind: "$values.v"
      },
      {
        $replaceRoot: {
          newRoot: "$values.v"
        }
      },
      
    ])
    

    MongoPlayground

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2020-07-03
      • 1970-01-01
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      相关资源
      最近更新 更多