2016-01-22 58 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來轉換。 –

相關問題