MongoDB数组元素拼接问题:聚合操作返回null求解决
问题分析与解决方案
你的问题出在对$map的用法理解有误:$map是用来遍历数组的每个元素,此时$$u代表的是word数组里的单个元素(比如第一个元素是字符串"1501143005"),所以$$u.0这种写法自然会返回null——因为字符串并没有名为0的属性。
而你的需求是取数组固定索引位置的元素进行拼接,完全不需要用到$map,直接在$project阶段通过数组索引访问元素即可:
db.getCollection('buffer2').aggregate([ { $project: { newId: { $concat: [ "$word.0", "-", "$word.2" ] }, oldId: { $concat: [ "$word.3", "-", "$word.2" ] } } } ]);
代码解释
$word.0:直接访问word数组的第1个元素(MongoDB数组索引从0开始)$concat:将指定的字符串元素拼接成一个新字符串- 不需要保留原
word数组的话,这个$project会自动排除原字段(除非显式指定保留)
执行这个聚合语句后,就能得到你期望的结果:
{ "_id" : ObjectId("5af9a044db06595c4a3c60d3"), "newId" : "1501143005-4100", "oldId" : "7493-4100"}
内容的提问来源于stack exchange,提问作者Андрей Кузьменко
相关产品推荐
相关产品推荐

