배열의 속성에 대한 복합 색인이있는 콜렉션이 있습니다. 내가 실행 해요 쿼리는 다음과 같습니다몽고 집계가 0을 반환합니다.
db.servers.find({$query: { features: {$elemMatch: {'name':'a','status':'passed'}}}}).count()
유효한 숫자를 반환하는 데 사용이 쿼리를,하지만 난 COUNT() 명령을 제거하면 지금은 0을 반환, 나는 일치의 긴 목록을 가져옵니다.
문제는 여기 - MongoDB's count() incorrectly returns 0 if a query is given
지금까지 내가 다시 시작하려 한 일, 업데이트, repaireDatabase를 실행 색인화를 실행 dropIndexes를 실행하고 몽구스 나를 위해 인덱스를 생성시키는, 그리고 mongodump 및 mongorestore을 실행하는 것과 비슷하다 . 저널링을 사용하고 있기 때문에 --repair 플래그로 mongod를 실행할 수 없었습니다. 이 같은 경고 수백 줄의 로그에 있습니다
파일 -
경고 : ClientCursor는 :: 수율을 잠금 해제 할 수없는/재귀 잠금 NS의 C B : 상단 zrk.servers : {OPID : 26, 활성 : true, secs_running : 9, op : "쿼리", ns : "zrk", 쿼리 : {repairDatabase : 1.0} 클라이언트 : "127.0.0.1:49917", desc : "conn1", threadId : 0, lock : {^ : "W"}, waitingForLock : false, numYields : 0, : 0, w : 2}}}
처음에는이 mongod를 복제 세트로 시작했지만 아직 보조 멤버를 추가하지 않았습니다. 데이터 디렉토리와 서버는 별도의 EBS 볼륨에 있습니다.
편집 : 문제는 데이터베이스가 손상된 것으로 생각하여 수동으로 모든 문서를 새로운 mongo로 이동했습니다. 위의 링크에서 같은 문제가 해결되었지만 해결되지 않았습니다.
오래된 빈 글자의 색인을 제거하고 하나 또는 두 개의 문서를 추가하여 다시 쿼리를 실행 해 보았습니다. 그것은 어느 쪽도 일하지 않았다. non-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
}
입니다. 보시다시피, 저는이 색인을 사용하여 임의의 문서를 선택합니다. 그러나 위의 찾기 쿼리에도 사용됩니다.
재미있는 버그. mongo 쉘을 사용하여 해당 쿼리를 실행할 수 있습니까? db 문제인지 node.js 드라이버 문제인지 확인하는 것이 도움이 될 것입니다. – 3rf
@ 3rf가 맞으면 찾기 문서에서 $ query {}를 제거해야합니다. –