我有一个字段code
,其中包含十六进制值。
如何在一个mongoose查询中获得集合中的最高值?
如果我有多个具有相同字段code
的集合,是否有办法根据一个请求中的所有集合获得最高值?
答案 0 :(得分:1)
通常要找到您需要的字段的最大值:
在该字段上有索引 - 然后检索相对较快 - 您只需采用反向排序的第一项。这里的问题是,如果你索引十六进制字符串,顺序将是词典,所以最大值将是字符串集的字典最大值。
这就是为什么添加一个整数字段是最好的选择,如果这个操作要重复多次。
此外,从纯数据建模的角度来看,它可能更好。该字段实际上是一个整数,十六进制字符串只是它的表示,所以它可能只有在呈现给最终用户时才能转换为十六进制?
在保持和更新最大值的同时迭代集合的所有元素。这可以使用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
})