MongoDB:根据小数位数查找数字

时间:2015-04-08 15:54:13

标签: mongodb

这是一个艰难的问题:

我想找到我的集合中的所有文档,它们在浮点后有超过2位小数,例如:包含

的文件
value: 2.45

..不应该返回,其中包含如下数字的文档:

value: 2.0000003

应该退回。不言而喻,数字不同。

2 个答案:

答案 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);
});