首页 > 解决方案 > 使用其他字段值访问随机字段

问题描述

我有这样的文件:

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

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

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

例如我想做:

{
  $unwind: "$value"
}

并得到展开的结果field2。我怎样才能做到这一点?

标签: mongodbmongoosemongodb-queryaggregation-frameworkaggregate

解决方案


这有点“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"
    }
  },
  
])

Mongo游乐场


推荐阅读