2015-01-04 1 views
1

Mongoose를 사용하여 특정 특성을 가진 문서의 수를 얻으 려하고 어떤 이유로 인해 변수를 사용하면 올바른 값을 반환하지 않습니다. 속성 이름에 대한 루프. 예를 들어, 아래 코드는 그 자체로 잘 작동합니다 :몽구스 쿼리에서 특성 이름에 대한 변수를 사용하여 올바른 결과를 반환하지 않음

Artist.count({lyric_soprano: true}, function(err, count) { 
    console.log(count); // 17 
}); 

내가 지금처럼, 루프 내에서 속성 이름을 입력 할 때 그것은 또한 작동합니다

var voices = ["lyric_soprano"]; 

async.map(voices, function(voiceType, callback) { 
    console.log(voiceType); // "lyric_soprano" 
    console.log(typeof voiceType); // String 
    console.log(voiceType == "lyric_soprano"); // true 
    Artist.count({lyric_soprano: true}, function(err, count) { 
    console.log(count); // 17 
    callback(null, count); 
    }); 
}, function(err, results) { 
    console.log(results); // [[17]] 
}); 

을하지만, 실제로 사용할 때 훨씬 큰 목소리 유형으로이 작업을 수행해야하므로 애트리뷰트 이름의 반복자 변수가 올바른 답을주지 못한다. , 자바 스크립트에서의 키 값 쌍과 Object를 만들 때, 때문에

var query = {}; 
query[voiceType] = true; 
Artist.count(query, function(err, count) {...} 

이 필요하며, 같은

Artist.count({voiceType: true}, function(err, count) {...} 

:

var voices = ["lyric_soprano"]; 

async.map(voices, function(voiceType, callback) { 
    console.log(voiceType); // "lyric_soprano" 
    console.log(typeof voiceType); // String 
    console.log(voiceType == "lyric_soprano"); // true 
    Artist.count({voiceType: true}, function(err, count) { 
    console.log(count); // 0 
    callback(null, count); 
    }); 
}, function(err, results) { 
    console.log(results); // [[0]] 
}); 
+0

아래 답변을 참조하십시오. 도움이된다면 답장의 왼쪽에있는 체크 표시를 클릭하여 친절하게 승인하거나 upvote하십시오. – BatScream

답변

2

당신은 코드를 변경해야 keysString 유형으로 강제 변환됩니다.

따라서 {voiceType: true}은 실제로 {"voiceType": true}으로 확인되어 쿼리가 0 개의 레코드를 반환합니다. 만약 query[voiceType] = true; 같은 값을 대입하면 이에

는 가변 voiceType 먼저 lyric_soprano를 해결하고 목적을 설정하고 행들의 정확한 수를 가져 오는 쿼리의 결과이다.

관련 문제