배열에서 전달 된 문자열의 $or
필터를 생성하여 20K 문서 컬렉션의 문서를 선택해야합니다.
function orConditionCreator(attName, tagsArray)
{
var myarray = [];
var myJSON = "";
for (var i = 0; i < tagsArray.length; i++) {
var key = attName;
var json = { };
// forming regex with case insensitivity
json[key] = "/" + tagsArray[i] + "/i";
myarray.push(json);
}
myJSON = JSON.stringify({ $or: myarray });
// myJSON contains quotes like in { "name" : "/HarryPotter/i" }
// this is not desirable for regex. So we strip the quotes
myJSON = myJSON.replace(/\"/g, "");
return myJSON;
}
그럼 내가 같이 호출 :
그래서 나는$or
조건을 생성하는 다음과 같은 기능을 썼다 예상대로 여기
//tags[0] = "harry" , tags[1] = "potter"
var orCondition = orConditionCreator("name", tags);
mongo.peopleColl.find(orCondition).toArray(function(err, documents) {
if(err) { /* handle */ }
// do stuff with documents
});
을 find(orCondition)
가 작동하지 않습니다. 지금, 나는 수동으로
mongo.peopleColl.find({$or:[{name:/harry/i},{name:/potter/i}]}).toArrarray(...
가 잘 작동하지만 orCondition
변수의 사용과 첫 번째 경우에 실패로 (collection.find하는 orConditionCreator
에 의해 반환 된 문자열)를 전달하는 경우.
이 $ 또는 조건의 동적 생성에 대한 도움이 될 것입니다. 감사!
당신이 당신의 게시물을 수정할 수'orConditionCreator'에 대한 코드를 포함? 그것은 당신이 생각하는 것을 반환하지 않을 가능성이 있습니다. 또한'$ or' 대신에'$ in'을 사용하면 훨씬 더 효율적입니다. – JohnnyHK
오류 메시지를 제공 할 수 있습니까? – damphat
@JohnnyHK : 원본 게시물을 'orConditionCreator'를 포함하도록 롤백했습니다. 그것을 확인하십시오. 그리고 이름이 'Harry Potter'와 같은 단일 문자열이기 때문에 $가 여전히 작동합니까? – Haywire