2012-12-01 4 views
5

나는 backend에서 Mongodb와 함께 nodejs/express 앱을 작업 중이다. 내 API 호출 중 하나에서 특정 querystring 매개 변수의 존재 여부에 따라 또는 $ gt 또는 $ lt 중 하나를 사용하여 Mongodb에 쿼리를 실행하려고합니다.MongoDB와 Node.js의 동적 쿼리

어떤 경우에는 $ lt를 사용하여 tokenId보다 적은 모든 것을 요청하지만 다른 경우에는 $ gt를 사용하여 tokenId보다 큰 모든 것을 원합니다. 쿼리를 복제하지 않고 어떻게해야합니까?

collection.find({'film_id': {$in : genre}, '_id': {$lt: tokenId}}).sort({'_id': -1}).limit(25).toArray(function(error, films) 

동적으로 실제로 2 개 개의 다른 쿼리를 수행하지 않고 쿼리를 만들 수있는 방법이 있나요 :

여기에 예제 쿼리입니까?

답변

15

프로그램 쿼리 객체를 구축 :

var query = { 
    film_id: {$in: genre}, 
    _id: {[param ? '$lt' : '$gt']: tokenId} 
}; 
0
:

이제

var query = {'film_id': {$in : genre}}; 
if (param) { 
    query._id = {$lt: tokenId}; 
} else { 
    query._id = {$gt: tokenId}; 
} 
collection.find(query).sort({'_id': -1}).limit(25).toArray(function(error, films); 

업데이트 Node.js를 4+가 computed property names를 지원하는지, 당신은 한 번에 query를 만들 수 있습니다

위 코드가 작동하지 않을 수 있습니다. 위의 동적 쿼리는 다음 Ex로 해결됩니다.

collection.find("_id":{$gt: 35}). 

"이중"는 따옴표가 안 : 토큰이 올바른 구문이되어야합니다 오류

결과의 정수 (35)

collection.find("_id":"{$gt: 35}") 
      .sort({'_id': -1}).limit(25).toArray(function(error, films); 

입니다.

+0

안녕하세요. 귀하의 게시물은 답변이 아닌 코멘트 또는 편집 일 수 있습니다. 또는 여전히 문제가있는 경우 새로운 질문을 올리십시오. –