我有一個具有數組屬性的複合索引的集合。我跑的查詢是:Mongo count聚合返回0
db.servers.find({$query: { features: {$elemMatch: {'name':'a','status':'passed'}}}}).count()
該查詢用於返回一個有效的數字,但現在它只返回0。如果我刪除計數()命令,我得到比賽的一個長長的清單。
的問題是一個類似於這裏 - MongoDB's count() incorrectly returns 0 if a query is given
到目前爲止,我已經試過重新啓動,更新,運行repaireDatabase,運行重新索引,運行dropIndexes並讓貓鼬創建索引對我來說,和運行mongodump和mongorestore 。我一直無法運行帶有--repair標誌的mongod,因爲我正在使用日誌。
有數以百計此相同的警告的線的日誌中文件 -
警告:ClientCursor ::產量不能解鎖B/C遞歸鎖納秒: zrk.servers頂部:{OPID :26,active:true,secs_running:9,op: 「query」,ns:「zrk」,query:{repairDatabase:1.0},client: 「127.0.0.1:49917」,desc:「conn1」,threadId :「0x7f5dfb4c2700」, connectionId:1,locks:{^:「W」},waitingForLock:false,numYields: 0,lockStats:{timeLockedMicros:{},timeAcquiringMicros:{R:0,W: 3,r :0,w:2}}}
我最初啓動這個配置爲副本集的mongod,但我還沒有添加任何次要成員。數據目錄和服務器位於單獨的EBS捲上。
編輯:思考問題是一個損壞的數據庫,我手動將我的所有文件移動到一個新的孟戈。這解決了上述鏈接中的相同問題,但沒有爲我解決。
我也嘗試刪除舊的,現在是空的,mongo上的索引,並添加一個或兩個文檔以再次運行查詢。那也沒用。非id索引是
{
"v" : 1,
"key" : {
"features.name" : 1,
"features.status" : 1,
"random" : 1
},
"ns" : "zrk.servers",
"name" : "features.name_1_features.status_1_random_1",
"background" : true,
"safe" : null
}
正如你所看到的,我通常使用這個索引來選擇隨機文件。但它也用於上述查找查詢。
有趣的bug。你可以嘗試使用mongo shell來運行該查詢嗎?如果這是一個數據庫問題或node.js驅動程序問題,將會有所幫助,您應該從查找文檔中移除$ query {} – 3rf
@ 3rf是對的。 –