Mongoose查找具有十六进制值的字段的最大值

时间:2014-09-28 00:50:18

标签: mongodb mongoose

我有一个字段code,其中包含十六进制值。

如何在一个mongoose查询中获得集合中的最高值?

如果我有多个具有相同字段code的集合,是否有办法根据一个请求中的所有集合获得最高值?

1 个答案:

答案 0 :(得分:1)

通常要找到您需要的字段的最大值:

  1. 在该字段上有索引 - 然后检索相对较快 - 您只需采用反向排序的第一项。这里的问题是,如果你索引十六进制字符串,顺序将是词典,所以最大值将是字符串集的字典最大值。

    这就是为什么添加一个整数字段是最好的选择,如果这个操作要重复多次。

    此外,从纯数据建模的角度来看,它可能更好。该字段实际上是一个整数,十六进制字符串只是它的表示,所以它可能只有在呈现给最终用户时才能转换为十六进制?

  2. 在保持和更新最大值的同时迭代集合的所有元素。这可以使用mongo游标上的简单.forEach轻松完成:

    var max = some_small_value;
    cur.forEach(function (doc) {
        var current = parseInt(doc.field, 16);
        if (max < current) {
             max = current;
        }   
    });
    

    或者在mongoose中,使用查询流:

     var stream = Model.find().stream();
     var max = some_small_value;
    
     stream.on('data', function (doc) {
        var current = parseInt(doc.field, 16);
        if (max < current) {
             max = current;
        }   
     });
     stream.on('close', function () {
        // do something with max
     })