MongoDB如何将逗号分隔的字符串字段转换为对象数组?
MongoDB字段转换为目标对象数组方案
你已经完成了逗号分割字符串、过滤空值得到语言字符串数组的核心步骤,只需要通过$map操作遍历数组,将每个字符串元素包装为要求的对象结构即可,完整可直接运行的更新语句如下:
db.collection.updateMany( {}, [ { $set: { languages: { $map: { // 复用已实现的字符串分割+空值过滤逻辑 input: { $filter: { input: { $split: ["$languages", ","] }, cond: { $gt: [{ $strLenCP: "$$this" }, 0] } } }, as: "langItem", in: { name: "$$langItem", active: false } } } } } ] )
逻辑适配说明
- 原字段为逗号分隔多语言值:
$split切割后得到多元素字符串数组,经$map遍历后生成对应数量的结构对象 - 原字段为单个语言值:切割后得到单元素数组,遍历后生成仅含1个对象的数组
- 原字段为空字符串:切割后得到仅含空串的数组,经
$filter过滤后为空数组,$map遍历空数组会直接返回空数组,完全匹配转换要求
如果你已经执行过之前写的更新语句,当前集合内的
languages字段已经是过滤完成的纯字符串数组,可以直接用简化版语句完成转换:db.collection.updateMany( {}, [ { $set: { languages: { $map: { input: "$languages", as: "langItem", in: { name: "$$langItem", active: false } } } } } ] )
内容的提问来源于stack exchange,提问作者TheStranger
相关产品推荐
相关产品推荐

