这是一个艰难的问题:
我想找到我的集合中的所有文档,它们在浮点后有超过2位小数,例如:包含
的文件value: 2.45
..不应该返回,其中包含如下数字的文档:
value: 2.0000003
应该退回。不言而喻,数字不同。
答案 0 :(得分:0)
我发现只有这个替代方案,用JavaScript迭代返回的JSON数据:
decimalPlaces = (num) ->
match = ('' + num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/)
if !match
return 0
Math.max 0, (if match[1] then match[1].length else 0) - (if match[2] then +match[2] else 0)
if decimalPlaces (myDocument.mySubDocument) > 2
console.log "got ya!"
注意:上面是coffeescript
答案 1 :(得分:0)
使用 custom function 返回数字中的小数位数:
var decimalPlaces = function (num) {
var match = (''+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);
if (!match) { return 0; }
return Math.max(
0,
// Number of digits right of decimal point.
(match[1] ? match[1].length : 0)
// Adjust for scientific notation.
- (match[2] ? +match[2] : 0));
}
您可以使用 forEach
游标上的 find()
方法迭代您的收藏集,将具有该字段的文档保存到另一个收藏集value
小数位数大于2:
db.collection.find().forEach( function (x) {
if decimalPlaces(x.value) > 2
db.new_collection.save(x);
});