【问题标题】:Rename field in projection when using Java driver使用 Java 驱动程序时重命名投影中的字段
【发布时间】:2021-09-11 01:00:24
【问题描述】:

我想重命名投影中的字段,但这在使用 Kotlin 和 MongoDB Java 驱动程序时不起作用。用Java驱动能做到吗?

    collection
        .find()
        // field removal works
        .projection(
            fields(exclude("excludefield1","excludefield2"))
        )
        // field rename does not work
        .projection(new Document("newfieldname","$oldfieldname"))
        .forEach...

【问题讨论】:

  • 你能用 kotlin 写聚合吗?
  • 我认为代码是 Kotlin 的事实并不相关,所以我用 Java 重写了示例。我需要aggregate 来重命名字段吗?
  • 是的,您可以在$project 阶段轻松做到这一点。

标签: java mongodb projection


【解决方案1】:

在使用聚合框架时,也可以这样做

  1. 使用 Projections.computed

project(fields(computed("newname", "$oldname")))

  1. 使用 Aggregates.addFields

addFields(Field("newname", "$oldname"))

【讨论】:

    【解决方案2】:

    您可以通过以下聚合轻松做到这一点:

    db.collection.aggregate([
      {
        "$project": {
          "newField": "$oldfieldname",
          _id: 0 // Optional
        }
      }
    ])
    

    Playground

    编辑:

    如果您的字段多于要排除的字段,您应该像这样使用$project

    db.collection.aggregate([
      {
        "$project": {
          "newField": "$oldfieldname",
          "includeField": 1 //Fields other than this will be excluded
        }
      }
    ])
    

    Playground2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2014-07-10
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      相关资源
      最近更新 更多