我有一个具有数组属性的复合索引的集合。我跑的查询是: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是对的。 –