Mongoose에서 두 개의 OR 쿼리를 AND와 결합


96

이 SQL 문과 같이 Monoose에서 AND와 두 개의 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

어떻게 두 조건을 결합 할 수 있습니다 myModule1myModule2와와 몽구스의를?


1
오타 : etc query.or({a: 1}, {b: 1});와 같은 형식이어야합니다 query.or([{a: 1}, {b: 1}]);.
Sonson123

답변:


206

다음과 같이 쿼리 개체를 직접 만드는 것이 가장 쉽습니다.

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

그러나 Query#and최근 3.x Mongoose 릴리스에서 사용 가능한 도우미를 사용할 수도 있습니다 .

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

$ 또는 문에서 어떤 조건이 작동했는지 (만족) 찾을 수있는 방법이 있습니까? @johnnyHK
이씨


2
난 당신이 직접 $와 대한 필요없이 $ 이상을 사용 할 수 있다고 생각
히샴

네! Hisham이 '$ and'없이 작동해야한다고 말했듯이 몽구스는 모든 쉼표를 '$ and'로 사용합니다. 누군가 그렇게 말할 수 있습니까?
Arnav 싱

3
$and동일한 이름 (의 $or)을 가진 객체에 두 개의 필드를 가질 수 없기 때문에 여기 에서 사용해야 합니다 .
JohnnyHK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.