2014-08-29 44 views
0

做這個查詢的查詢邏輯是這樣的:如何在MongoDB中

(A > x OR A < y) AND (B > m OR B < n) AND C = z 

db.test.find({$or:[{A:{$gt:x}}, {A:{$lt:y}}], C:z}) 

但如何添加B的條件進入這個查詢。

回答

1

作爲(A > x OR A < y) A和(B > m OR B < n) B,那麼剩下的C,包裝他們的$和比較內:{$and: [A, B, C]},如:

db.test.find({ 
    $and: [ 
     {$or: [{A: {$gt: x}}, {A: {$lt: y}}]}, 
     {$or: [{B: {$gt: m}}, {B: {$lt: n}}]}, 
     C: z 
    ] 
}) 
+0

但我的MongoDB的服務器版本是1.8.2,不支持$和運營商 – helloxk 2014-08-29 01:42:50

+0

如果$和運營商不支持,在APPLICA做灰度級。這是出路。您可能必須在兩個或三個查詢中獲取數據,然後在應用程序級別「與」它們。 – Danish 2014-08-29 04:52:11

0

您也可以使用$or但不能使用$and,你可以分裂第一查詢組(共3組)是這樣的:

db.test.find({ 
    $or : [ { 
     A : { 
      $gt : x 
     }, 
     $or : [ { 
      B : { 
       $gt : m 
      } 
     }, { 
      B : { 
       $lt : n 
      } 
     } ] 
    }, { 
     A : { 
      $lt : y 
     }, 
     $or : [ { 
      B : { 
       $gt : m 
      } 
     }, { 
      B : { 
       $lt : n 
      } 
     } ] 
    } ], 
    C : z 
});