-
Type:
Bug
-
Resolution: Done
-
Priority:
Major - P3
-
None
-
Affects Version/s: 3.0.11, 3.2.4
-
Component/s: Querying
-
None
-
ALL
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Here is my docs look like:
shifudaoRs:SECONDARY> db.equipment.rtdata.find()
{ "_id" : ObjectId("5610093899695e7062add4ac"), "timestamp" : NumberLong("1443891603962"), "1" : 0, "2" : 0, "3" : 26, "4" : 2530971136, "5" : 655369984, "38" : 0, "37" : 0, "36" : 1, "35" : 0, "34" : 0, "33" : 0, "32" : 1, "31" : 1, "54" : 0, "53" : 0, "52" : 0, "51" : 0, "50" : 0, "49" : 0, "48" : 0, "47" : 1, "70" : 1, "69" : 0, "68" : 0, "67" : 1, "66" : 0, "65" : 1, "64" : 0, "63" : 1, "isLoad" : 0, "isRun" : 0, "power" : 41.25, "6" : 10000, "7" : 10000, "8" : 20545, "9" : 0, "10" : 1280, "86" : 0, "85" : 0, "84" : 0, "83" : 0, "82" : 0, "81" : 0, "80" : 0, "79" : 0, "src" : NumberLong(33) }
{ "_id" : ObjectId("5610094299695e7062add4c4"), "timestamp" : NumberLong("1443891613010"), "1" : 0, "2" : 0, "3" : 26, "4" : 2530971136, "5" : 655369984, "38" : 0, "37" : 0, "36" : 1, "35" : 0, "34" : 0, "33" : 0, "32" : 1, "31" : 1, "54" : 0, "53" : 0, "52" : 0, "51" : 0, "50" : 0, "49" : 0, "48" : 0, "47" : 1, "70" : 1, "69" : 0, "68" : 0, "67" : 1, "66" : 0, "65" : 1, "64" : 0, "63" : 1, "isLoad" : 0, "isRun" : 0, "power" : 41.25, "6" : 10000, "7" : 10000, "8" : 20545, "9" : 0, "10" : 1280, "86" : 0, "85" : 0, "84" : 0, "83" : 0, "82" : 0, "81" : 0, "80" : 0, "79" : 0, "src" : NumberLong(33) }
{ "_id" : ObjectId("5610094c99695e7062add4da"), "timestamp" : NumberLong("1443891624859"), "1" : 0, "2" : 0, "3" : 26, "4" : 2530971136, "5" : 655369984, "38" : 0, "37" : 0, "36" : 1, "35" : 0, "34" : 0, "33" : 0, "32" : 1, "31" : 1, "54" : 0, "53" : 0, "52" : 0, "51" : 0, "50" : 0, "49" : 0, "48" : 0, "47" : 1, "70" : 1, "69" : 0, "68" : 0, "67" : 1, "66" : 0, "65" : 1, "64" : 0, "63" : 1, "isLoad" : 0, "isRun" : 0, "power" : 41.25, "6" : 10000, "7" : 10000, "8" : 20545, "9" : 0, "10" : 1280, "86" : 0, "85" : 0, "84" : 0, "83" : 0, "82" : 0, "81" : 0, "80" : 0, "79" : 0, "src" : NumberLong(33) }
{ "_id" : ObjectId("5610095699695e7062add4f1"), "timestamp" : NumberLong("1443891634234"), "1" : 0, "2" : 0, "3" : 26, "4" : 2530971136, "5" : 655369984, "38" : 0, "37" : 0, "36" : 1, "35" : 0, "34" : 0, "33" : 0, "32" : 1, "31" : 1, "54" : 0, "53" : 0, "52" : 0, "51" : 0, "50" : 0, "49" : 0, "48" : 0, "47" : 1, "70" : 1, "69" : 0, "68" : 0, "67" : 1, "66" : 0, "65" : 1, "64" : 0, "63" : 1, "isLoad" : 0, "isRun" : 0, "power" : 41.25, "6" : 10000, "7" : 10000, "8" : 20545, "9" : 0, "10" : 1280, "86" : 0, "85" : 0, "84" : 0, "83" : 0, "82" : 0, "81" : 0, "80" : 0, "79" : 0, "src" : NumberLong(33) }
And here is my indexes:
shifudaoRs:SECONDARY> db.equipment.rtdata.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "aircareRealtimeDB.equipment.rtdata"
},
{
"v" : 1,
"key" : {
"src" : 1,
"timestamp" : -1
},
"name" : "src_1_timestamp_-1",
"ns" : "aircareRealtimeDB.equipment.rtdata",
"background" : true
},
{
"v" : 1,
"key" : {
"src" : 1
},
"name" : "src_1",
"ns" : "aircareRealtimeDB.equipment.rtdata",
"background" : true
},
{
"v" : 1,
"key" : {
"timestamp" : -1
},
"name" : "timestamp_-1",
"ns" : "aircareRealtimeDB.equipment.rtdata",
"background" : true
}
]
I want distinct("src") by timestamp duration.
I find only distinct the whole src executed very fast:
shifudaoRs:SECONDARY> db.runCommand({ distinct: 'equipment.rtdata',key:'src'})
{
"values" : [
... SNIP ...
],
"stats" : {
"n" : 467,
"nscanned" : 467,
"nscannedObjects" : 0,
"timems" : 17,
"planSummary" : "DISTINCT { src: 1 }"
},
"ok" : 1
}
But when I add a query about the timestamp duration, will be very slow.
db.runCommand({ distinct: 'equipment.rtdata',key:'src', query: {timestamp: {$gte:0, $lt:999999999999999999999}}})
Of course this will be the same result, but execute very slow. And have not finished for now.
shifudaoRs:SECONDARY> db.currentOp()
{
"inprog" : [
{
"desc" : "conn51410",
"threadId" : "0xf1dfd40",
"connectionId" : 51410,
"opid" : 20780367,
"active" : true,
"secs_running" : 2304,
"microsecs_running" : NumberLong("2304321577"),
"op" : "query",
"ns" : "aircareRealtimeDB.equipment.rtdata",
"query" : {
"distinct" : "equipment.rtdata",
"key" : "src",
"query" : {
"timestamp" : {
"$gte" : 0,
"$lt" : 1e+21
}
}
},
"client" : "127.0.0.1:50387",
"numYields" : 452037,
"locks" : {
"Global" : "r",
"Database" : "r",
"Collection" : "r"
},
"waitingForLock" : false,
"lockStats" : {
"Global" : {
"acquireCount" : {
"r" : NumberLong(904076)
},
"acquireWaitCount" : {
"r" : NumberLong(4683)
},
"timeAcquiringMicros" : {
"r" : NumberLong(10905279)
}
},
"Database" : {
"acquireCount" : {
"r" : NumberLong(452038)
}
},
"Collection" : {
"acquireCount" : {
"r" : NumberLong(452038)
}
}
}
}
]
}
Maybe mongodb not use the "src" indexes? How could I optimize this distinct ?