You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB:如何将集合中字符串映射为另一集合的对应整数

实现方案

方式一:MongoDB 聚合管道(数据库端处理)

假设第一个集合名为 docs,第二个评分映射集合名为 rate_mappings,可通过聚合管道完成映射转换:

db.docs.aggregate([
  // 关联评分映射集合,生成键值对映射对象
  {
    $lookup: {
      from: "rate_mappings",
      pipeline: [
        {
          $group: {
            _id: null,
            mapping: {
              $mergeObjects: {
                $arrayToObject: [[["$rate_name", "$rate_value"]]]
              }
            }
          }
        }
      ],
      as: "rate_map"
    }
  },
  // 提取映射对象
  {
    $addFields: {
      rate_map: { $arrayElemAt: ["$rate_map.mapping", 0] }
    }
  },
  // 将rates数组中的字符串评分替换为对应数值
  {
    $addFields: {
      rates: {
        $map: {
          input: "$rates",
          as: "item",
          in: { $getField: { field: "$$item.rate", input: "$rate_map" } }
        }
      }
    }
  },
  // 移除临时的rate_map字段(可选)
  {
    $project: {
      rate_map: 0
    }
  }
])

方式二:客户端代码处理(以 Python 为例)

如果更倾向于在应用层处理,可先获取评分映射关系,再批量更新目标集合:

from pymongo import MongoClient

# 连接数据库
client = MongoClient("mongodb://localhost:27017/")
db = client["your_database_name"]

# 构建评分映射字典
rate_mapping = {doc["rate_name"]: doc["rate_value"] for doc in db.rate_mappings.find()}

# 遍历并更新每个文档
for doc in db.docs.find():
    # 转换rates数组
    new_rates = [rate_mapping[item["rate"]] for item in doc["rates"]]
    # 更新文档
    db.docs.update_one(
        {"_id": doc["_id"]},
        {"$set": {"rates": new_rates}}
    )

注意事项

  1. 修正原始数据中的 JSON 语法错误:原始集合文档中存在缺少逗号的问题(如 id:'1' 后、{'user_id':'13','rate':'very_good'} 后),实际使用时需先修正。
  2. 若评分映射数据不频繁变动,方式二性能更优;若映射关系经常更新,推荐使用方式一的聚合管道实时处理。

内容的提问来源于stack exchange,提问作者MrOldSir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:10:30