Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Mongo计数聚合返回0_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js Mongo计数聚合返回0

Node.js Mongo计数聚合返回0,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个集合,其中包含数组属性的复合索引。我正在运行的查询是: db.servers.find({$query: { features: {$elemMatch: {'name':'a','status':'passed'}}}}).count() 此查询以前返回有效数字,但现在只返回0。如果删除count()命令,将得到一长串匹配项 问题与这里的问题类似- 到目前为止,我已经尝试重新启动、更新、运行repaireDatabase、运行reIndex、运行dropIndexes并让mongoo

我有一个集合,其中包含数组属性的复合索引。我正在运行的查询是:

db.servers.find({$query: { features: {$elemMatch: {'name':'a','status':'passed'}}}}).count()
此查询以前返回有效数字,但现在只返回0。如果删除count()命令,将得到一长串匹配项

问题与这里的问题类似-

到目前为止,我已经尝试重新启动、更新、运行repaireDatabase、运行reIndex、运行dropIndexes并让mongoose为我创建索引,以及运行mongodump和mongorestore。由于使用日志记录,我无法使用--repair标志运行mongod

日志文件中有数百行相同的警告-

警告:ClientCursor::yield无法解锁递归锁ns的b/c: zrk.servers top:{opid:26,active:true,secs_running:9,op: “查询”,ns:“zrk”,查询:{repairDatabase:1.0},客户端: “127.0.0.1:49917”,描述:“conn1”,线程ID:“0x7f5dfb4c2700”, connectionId:1,locks:{^:“W”},waitingForLock:false,numields: 0,lockStats:{timeLockedMicros:{},timeAcquiringMicros:{R:0,W: 3,r:0,w:2}

我最初启动了配置为副本集的mongod,但尚未添加任何辅助成员。数据目录和服务器位于单独的EBS卷上

编辑:认为问题在于数据库损坏,我手动将所有文档移动到新的mongo。这在上面的链接中解决了相同的问题,但没有为我解决它

我还尝试删除旧的、现在为空的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
        }

如您所见,我通常使用此索引来选择随机文档。但是它也用于上面的find查询。

我认为问题可能是您在find查询中使用了“$query”。不再需要将“$query”作为find命令的一部分,并且根据文档。尝试将查询重写为

db.servers.find({features:{$elemMatch:{'name':'a','status':'passed'}}})

然后看看.count()是否有效。

我认为问题可能是您在查找查询中使用了“$query”。不再需要将“$query”作为find命令的一部分,并且根据文档。尝试将查询重写为

db.servers.find({features:{$elemMatch:{'name':'a','status':'passed'}}})

然后看看.count()是否有效。

有趣的错误。您可以尝试使用mongo shell运行该查询吗?了解这是db问题还是node.js驱动程序会很有帮助issue@3rf是的,您应该从find文档中删除$query{}。有趣的bug。您可以尝试使用mongo shell运行该查询吗?了解这是db问题还是node.js驱动程序会很有帮助issue@3rf是的,您应该从find文档中删除$query{}。与其说它们“阻止”游标帮助器,还不如说它们是制定命令或查询的两种不同方式,您不能将它们混合使用。附加到游标的count()方法在计算DBQuery之前被转换为其他方法。与其说它们“阻止”游标帮助器,还不如说它们是制定命令或查询的两种不同方法,不能混合使用。在计算DBQuery之前,附加到游标的count()方法被转换为其他方法。