2016-01-22 60 views
0

我们有一个问题,其中某些字符串显示为123,00123,000123.我们需要按此字段进行分组,并且我们希望以上所有内容都被视为一个组。我知道这些值的长度不能大于6.Mongo - 如何将leftpad值设置为一定的长度?

我在考虑的方法是在投影中留下所有这些字段,长度为6.一种方法是首先将6 0连接到然后做一个substr - 但没有可用的长度来计算substr方法的索引。 - JIRA

有没有更直接的东西?在这里找不到任何东西:https://docs.mongodb.org/manual/meta/aggregation-quick-reference/#aggregation-expressions还是有人解决这个问题?

+0

怎样使用mapReduce?你能用预期的结果显示样本文件吗? – styvane

+0

不想去mapreduce - 运行需要更长的时间。但是,最终不得不这样做。 –

回答

0

然后我会转换为int。例如:

对于集合:

db.leftpad.insert([ 
    {key:"123"}, 
    {key:"0123"}, 
    {key:"234"}, 
    {key:"000123"} 
]) 

计数:

db.leftpad.mapReduce(function(){ 
    emit(this.key * 1, 1); 
}, function(key, count) { 
    return Array.sum(count); 
}, {out: { inline: 1 }} 
).results 

返回数组:

[ 
    {_id : 123, value : 3}, 
    {_id : 234, value : 1} 
] 

如果可以的话,它可能值得去一次,减少碳排放量

db.leftpad.find({key:{$exists:true}, intKey:{$exists:false}}).forEach(function(d){ 
    db.leftpad.update({_id:d._id}, {$set:{intKey: d.key * 1}}); 
}) 

然后通过组intKey

+0

谢谢!使用mapReduce来转换。 –

相关问题