【问题标题】:MongoDB: Project only fields of a specific typeMongoDB:仅项目特定类型的字段
【发布时间】:2020-12-22 21:38:48
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: mongodb types projection


    【解决方案1】:

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

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

    Playground

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多