MongoDB: 仅投影特定类型的字段

MongoDB: Project only fields of a specific type

MongoDB 中有没有一种方法可以投影具有特定类型的文档的所有字段?

例如,如果我有以下文档:

{
  _id: 5dde4c55c6c36b3bb4f5ad30,
  name: "Peter",
  age: 45,
  division: "marketing"
}

我想说:Return只有string类型的字段。这样我最终会得到:

{
  _id: 5dde4c55c6c36b3bb4f5ad30,
  name: "Peter",
  division: "marketing"
}

您可以使用$type检查字段类型,

  • $reduce 输入 $$ROOT 对象作为数组使用 $objectToArray
  • 检查条件,如果字段值类型是 string 然后与 initialValue 和 return
  • 连接
  • return 值将是数组,我们需要使用 $arrayToObject
  • 将其转换为数组
  • $replaceWith 将根替换为新的 returned 对象
db.collection.aggregate([
  {
    $replaceWith: {
      $arrayToObject: {
        $reduce: {
          input: { $objectToArray: "$$ROOT" },
          initialValue: [],
          in: {
            $concatArrays: [
              "$$value",
              {
                $cond: [
                  { $eq: [{ $type: "$$this.v" }, "string"] },
                  ["$$this"],
                  []
                ]
              }
            ]
          }
        }
      }
    }
  }
])

Playground