2013-03-15 102 views
0

我想查詢的MongoDB獲得類似:MongoDB的範圍外查詢

「隨着年齡的人不在範圍[30,40]」

我做:

db.persons.find({'age' : {$nin : [{$lt : 30},{$gt : 40}]}}) 

這不適合我。我知道我可以做類似與< 30歲人,人隨着年齡> 40,但我想知道如果我可以用「不是」運營商... 感謝

回答

1

$ in/$ nin是用於查詢列表中的離散值並且不能用於範圍搜索的運算符。

在你的榜樣,用$ n在查詢必須是

db.persons.find({age:{$nin:[30,31,32,33,34,35,36,37,38,39,40]}}) 

這一點也不實用,此外,也不會使用索引的:

db.persons.ensureIndex({age:1}) 
db.persons.find({age:{$nin:[30,31,32,33,34,35,36,37,38,39,40]}}).explain() 
    { 
     "cursor" : "BasicCursor", 
     "isMultiKey" : false, 
     "n" : 1, 
     "nscannedObjects" : 1, 
     "nscanned" : 1, 
     "nscannedObjectsAllPlans" : 1, 
     "nscannedAllPlans" : 1, 
     "scanAndOrder" : false, 
     "indexOnly" : false, 
     "nYields" : 0, 
     "nChunkSkips" : 0, 
     "millis" : 0, 
     "indexBounds" : { 

     }, 
     "server" : "Aspire-5750:27017" 
    } 

Sgoettschkes '上面的答案是正確的,將使用索引:

db.persons.find({$or: [{'age': {$lt: 30}},{'age': {$gt : 40}}]}).explain() 
{ 
    "clauses" : [ 
     { 
      "cursor" : "BtreeCursor age_1", 
      "isMultiKey" : false, 
      "n" : 0, 
      "nscannedObjects" : 0, 
      "nscanned" : 0, 
      "nscannedObjectsAllPlans" : 0, 
      "nscannedAllPlans" : 0, 
      "scanAndOrder" : false, 
      "indexOnly" : false, 
      "nYields" : 0, 
      "nChunkSkips" : 0, 
      "millis" : 12, 
      "indexBounds" : { 
       "age" : [ 
        [ 
         -1.7976931348623157e+308, 
         30 
        ] 
       ] 
      } 
     }, 
     { 
      "cursor" : "BtreeCursor age_1", 
      "isMultiKey" : false, 
      "n" : 1, 
      "nscannedObjects" : 1, 
      "nscanned" : 1, 
      "nscannedObjectsAllPlans" : 1, 
      "nscannedAllPlans" : 1, 
      "scanAndOrder" : false, 
      "indexOnly" : false, 
      "nYields" : 0, 
      "nChunkSkips" : 0, 
      "millis" : 0, 
      "indexBounds" : { 
       "age" : [ 
        [ 
         40, 
         1.7976931348623157e+308 
        ] 
       ] 
      } 
     } 
    ], 
    "n" : 1, 
    "nscannedObjects" : 1, 
    "nscanned" : 1, 
    "nscannedObjectsAllPlans" : 1, 
    "nscannedAllPlans" : 1, 
    "millis" : 12, 
    "server" : "Aspire-5750:27017" 
} 

有關queryin的更多信息g有效,參見http://docs.mongodb.org/manual/core/read-operations/