我收藏TESTDATA具有一定4長槍文檔與相同的結構:使用db.collection.find()方法的Mongodb查詢比使用db.collection.aggregate()快100倍?
{"_id" : ObjectId("5932c56571f5a268cea12226"),
"x" : 1.0,
"text" : "w592cQzC5aAfZboMujL3knCUlIWgHqZNuUcH0yJNS9U4",
"country" : "Albania",
"location" : {
"longitude" : 118.8775183,
"latitude" : 75.4316019
}}
的集合上(國家,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秒用於第一時間查詢)產生輸出。
我在這裏錯過了什麼?感謝任何反饋。
您錯過了聚合與查找不同的事實。是的,對於你的查詢你應該使用find。如果你真的在做聚合,那麼你會使用聚合框架。它比較慢,因爲它針對不同的事情進行了優化,並且可能在引擎蓋下使用了一個光標以允許這些事情發生。 – Paul
@Paul - 感謝您的及時回覆。我正在考慮對大多數查詢使用聚合框架(我將我的應用程序從MySQL移動到MongoDB),因爲它似乎更通用,我需要一些計算,但這種速度差異是該計劃的一大缺點。 .. –
使用合適的工具進行正確的工作。 – Paul