我的集合testData包含大约4百万个具有相同结构的文档:
{"_id" : ObjectId("5932c56571f5a268cea12226"),
"x" : 1.0,
"text" : "w592cQzC5aAfZboMujL3knCUlIWgHqZNuUcH0yJNS9U4",
"country" : "Albania",
"location" : {
"longitude" : 118.8775183,
"latitude" : 75.4316019
}}
该集合在(country,location.longitude)对上编入索引。
我认为相同且产生相同输出的以下两个查询的执行时间相差100倍:
db.testData.aggregate(
[
{ $match : {country : "Brazil"} },
{ $sort : { "location.longitude" : 1 } },
{ $project : {"_id" : 0, "country" : 1, "location.longitude" : 1} }
]);
(这个在重复查询后大约6秒内产生输出,第一次查询大约120秒产生输出)
db.testData.find(
{ country : "Brazil" },
{"_id" : 0, "country" : 1, "location.longitude" : 1}
).sort(
{"location.longitude" : 1}
);
(这个重复查询在15毫秒内产生输出,第一次查询产生大约1秒)。
我在这里缺少什么? Thanx任何反馈。
答案 0 :(得分:0)
MongoDB查找操作用于根据过滤器从集合中获取文档。 MongoDB聚合对一个集合中的值进行分组,并通过执行管道中的阶段并返回计算结果来对值组执行计算。
与聚合操作相比,MongoDB查找操作执行速度快,因为聚合操作将多个阶段封装到管道中,管道对存储到集合中的数据执行计算,每个阶段的输出用作另一个阶段的输入并返回处理结果。 Mongo DB find操作将游标返回到与过滤器匹配的已获取文档,并且迭代游标以访问文档。
根据上述描述,我们只需要获取国家/地区密钥值为巴西的文档,并按照经度键的值按升序对文档进行排序,这可以使用MongoDB查找操作轻松完成。