【问题标题】:MongoDB Aggregation : Rename a field in mongodb from ObjectId to literal/String?MongoDB 聚合:将 mongodb 中的字段从 ObjectId 重命名为文字/字符串?
【发布时间】:2020-01-10 10:15:06
【问题描述】:

我有一个 mongo 集合,其中包含字段 id、mobile 和 name 数组。 以下是我的收藏示例,

        {
        "_id": 1,
        "mobile": "555-555-5555",
        "name": { "first" : ObjectId("1122334455") }
        }

        {
        "_id": 2,
        "mobile": "222-222-2222",
        "name": { "first" : ObjectId("5544332211") }
        }

        {
        "_id": 3,
        "mobile": "111-111-1111",
        "name": { "first" : ObjectId("1122334455")}
        }

我想将数组name 中的first 字段从ObjectId 重命名为literal 所以我的输出会是这样的,

       {
        "_id": 1,
        "mobile": "555-555-5555",
        "name": { "first" : "Tom" }
        }

        {
        "_id": 2,
        "mobile": "222-222-2222",
        "name": { "first" : "abigail" }
        }

        {
        "_id": 3,
        "mobile": "111-111-1111",
        "name": { "first" : "Tom"}
        }

【问题讨论】:

  • Tom、abigail 是从哪里来的?
  • 它是一个要替换的字符串,对于 ObjectId("1122334455") - "Tom"

标签: mongodb aggregation-framework aggregation


【解决方案1】:

您可以使用$lookup。我假设您有 user_source 收藏,可以保存您的用户详细信息。

db.getCollection('Test01').aggregate(
[
    {
       $lookup:
       {
         from: "user_source",
         localField: "name.first",
         foreignField: "_id",
         as: "fromUsers"
       }
    },
    { $addFields : { "name.first":  {$arrayElemAt: [ "$fromUsers.name", 0 ]} } },
    { $project: { fromUsers: 0 } },
]
)

【讨论】:

  • 有没有办法用字符串替换/重命名objectId。
  • 你可以使用$toString
  • $toString 将使 ObjectId 成为字符串。然后我们可以将字符串替换为另一个字符串。 docs.mongodb.com/manual/reference/operator/aggregation/toString/…
  • 您是否也想将用户的 ObjectId 值作为字符串获取?
  • 好的,那么我将按照上面的建议制作一个用于存储用户详细信息的表格。
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2018-06-25
  • 1970-01-01
相关资源
最近更新 更多