如何将MongoDB集合中的数组投影为逗号分隔字符串?
MongoDB数组转逗号分隔字符串的正确投影方法
你的代码存在三个关键问题,导致无法得到预期的逗号分隔字符串:
initialValue设为"0"会让结果开头多出无效字符,应改为空字符串""- 字符串拼接语法错误,MongoDB中需使用
$concat操作符,而非{concat: [...]}的对象形式 - 未添加分隔符,直接拼接会使数组元素连在一起,没有逗号分隔
下面提供两种可行的解决方案:
方法1:使用$reduce兼容低版本MongoDB
如果你的MongoDB版本低于4.4,可通过$reduce结合条件判断实现,避免开头出现多余逗号:
{ _id: 1, Products: { $reduce: { input: "$Products", initialValue: "", in: { $cond: [ { $eq: ["$$value", ""] }, "$$this", { $concat: ["$$value", ", ", "$$this"] } ] } } } }
方法2:使用$join(MongoDB 4.4+推荐)
MongoDB 4.4及以上版本支持$join操作符,可直接将数组转为指定分隔符的字符串,写法更简洁:
{ _id: 1, Products: { $join: { input: "$Products", separator: ", " } } }
执行后均可得到你期望的结果:
_id: "12345" Products: "Product1, Product2"
内容的提问来源于stack exchange,提问作者O'Neil Tomlinson
相关产品推荐
相关产品推荐

