복붙노트

[MONGODB] 로와 몽구스의 두 OR-쿼리를 결합

MONGODB

로와 몽구스의 두 OR-쿼리를 결합

나는이 SQL 문에서 같은과와 몽구스의 두 OR-쿼리를 결합하려는 :

SELECT * FROM ... WHERE (a = 1 OR b = 1) AND (c=1 OR d=1)

난 단지 기본 응용 프로그램에서 모델 객체를 가져 NodeJS 모듈이 시도 :

/********** Main application ***********/
var query = MyModel.find({});
myModule1.addCondition(query);
myModule2.addCondition(query);
query.exec(...)

/************ myModule1 ***************/
exports.addCondition = function(query) {
  query.or({a: 1}, {b: 1});
}

/************ myModule2 ***************/
exports.addCondition = function(query) {
  query.or({c: 1}, {d: 1});
}

그러나이 모든 OR-조건이 함께이 SQL 문에 같이 참여 얻을 것이다 작동하지 않습니다 :

SELECT * FROM ... WHERE a = 1 OR b = 1 OR c=1 OR d=1

어떻게 함께와 몽구스의 인 MyModule 1 인 MyModule 2의 두 가지 조건을 결합 할 수 있습니다?

해결법

  1. ==============================

    1.그것은으로 직접 쿼리 개체를 만들 아마 가장 쉬운 방법 :

    그것은으로 직접 쿼리 개체를 만들 아마 가장 쉬운 방법 :

      Test.find({
          $and: [
              { $or: [{a: 1}, {b: 1}] },
              { $or: [{c: 1}, {d: 1}] }
          ]
      }, function (err, results) {
          ...
      }
    

    그러나 당신은 또한 최근 3.x를 몽구스 릴리스에서 사용할 수 쿼리 # 및 도우미를 사용할 수 있습니다 :

      Test.find()
          .and([
              { $or: [{a: 1}, {b: 1}] },
              { $or: [{c: 1}, {d: 1}] }
          ])
          .exec(function (err, results) {
              ...
          });
    
  2. from https://stackoverflow.com/questions/13272824/combine-two-or-queries-with-and-in-mongoose by cc-by-sa and MIT license