gpt4 book ai didi

javascript - 为什么 Mongoose 排序比原生 javascript 排序慢?

转载 作者:可可西里 更新时间:2023-11-01 09:34:16 25 4
gpt4 key购买 nike

我使用的是 Node.js 6.10.0 和 Mongoose 4.8.5。实际上我正在尝试从坐标和特定日期时间找到最近的坐标。我的 MongoDB 中有数十亿数据。我想对我的查询进行排序,因为我想按日期时间排序

(2017-03-02T03:00:00.000Z, 2017-03-02T03:01:00.000Z ... 2017 -03-02T03:23:00.000Z)

所以这是我使用 Mongoose 排序的查询:

var condition = {
$nearSphere: {
$geometry: {
type : "Point",
coordinates : [2.2871244564, 47.930476456445]
}
}
};

var date_condition = {
$gte: new Date('2017-03-02'),
$lt: new Date('2017-03-03')
};

var selected_fields = '-_id loc datetime';

console.time('find')
var query = Model.find({loc: condition, datetime: date_condition}, selected_fields)
.limit(24)
.sort({date: 'asc'})
.exec();

query.then(function(docs){
var json = {};
json.data = docs;
console.timeEnd('find')
res.json(json);
});

这里使用 native 排序简单地执行相同的查询:

console.time('find')
var query = Model.find({loc: condition, datetime: date_condition}, selected_fields)
.limit(24)
.exec();

query.then(function(docs){
var json = {};
docs.sort(function(a, b) {
return new Date(a.datetime) - new Date(b.datetime);
});
json.data = docs;
console.timeEnd('find')
res.json(json);
});

然后使用 Mongoose 排序请求需要 8000 - 10000 MS。使用原生排序,请求只需 15 毫秒

你能告诉我为什么原生排序比 Mongoose 排序好吗?或者也许我的 Mongoose 查询有问题?

最佳答案

正如 @JuanMendes 在评论中所说,第一个执行 sort 然后应用 limit,这意味着 MongoDB 对所有数十亿个文档进行排序并返回给你 24 份文件。在第二个中,您仅从 MongoDB 获取 24 个文档并使用 javascript 的排序对它们进行排序。因此, native javascript 排序和 MongoDB 排序之间没有区别。排序 24 个文档和排序数十亿个文档之间的区别

sortlimit 的顺序无关紧要。 MongoDB 总是在应用limit 之前进行sort。参见 this

关于javascript - 为什么 Mongoose 排序比原生 javascript 排序慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42577630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com