এবং মঙ্গুজে দুটি ও-কোয়েরি একত্রিত করুন


92

আমি এই এসকিউএল স্টেটমেন্টের মতো এবং মনসুতে এবং এর সাথে দুটি ও-কোয়েরি একত্রিত করতে চাই:

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

আমি এটি কোনও নোডজেএস মডিউলে চেষ্টা করেছি যা কেবলমাত্র মূল অ্যাপ্লিকেশন থেকে মডেল অবজেক্টটি পায়:

/********** 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});
}

তবে এটি কার্যকর হয় না, সমস্ত এসআরকিউএল স্টেটমেন্টের মতো সমস্ত ও-শর্তগুলি একসাথে যোগদান করবে:

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

আমি কীভাবে এবং মংগুজে myModule1এবং এর myModule2সাথে দুটি শর্ত একত্রিত করতে পারি ?


4
টাইপো: query.or({a: 1}, {b: 1});ভালো কিছু হওয়া উচিত query.or([{a: 1}, {b: 1}]);ইত্যাদি
Sonson123

উত্তর:


203

আপনার ক্যোয়ারী অবজেক্টটি সরাসরি হিসাবে তৈরি করা সম্ভবত এটি সবচেয়ে সহজ:

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

তবে আপনি Query#andসাম্প্রতিক 3.x এ উপলব্ধ সহায়কটিও ব্যবহার করতে পারেন মঙ্গুজ প্রকাশ:

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

Condition বা বিবৃতিতে সন্ধান করার কোনও উপায় আছে যা শর্তটি কাজ করেছে (সন্তুষ্ট)। @ জোহনিএইচকে
વિશাল


4
আমি মনে করি আপনি for বা সরাসরি প্রয়োজন ছাড়াই $ এবং
হিশাম

হ্যাঁ! হিশাম যেমন বলেছিলেন এটি 'without ছাড়া কাজ করা উচিত এবং মঙ্গস প্রতিটি কমাটিকে' $ এবং 'হিসাবে গ্রহণ করে। কেউ কি বলতে পারে?
অর্ণব সিং

4
আপনাকে $andএখানে ব্যবহার করতে হবে কারণ একই নামে (এর $or) কোনও বস্তুতে আপনার দুটি ক্ষেত্র থাকতে পারে না ।
জনিএইচকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.