2016-11-02 57 views
2

我有這樣一個文件:

{ 
    _id:"1", 
    archive:[{mark:10},{mark:20},{mark:30},{mark:40}] 
}, 
{ 
    _id:"2", 
    archive:[{mark:12},{mark:25},{mark:30}] 
}, 
{ 
    _id:"3", 
    archive:[{mark:15},{mark:18}] 
} 
.... 

我想找到的文件,其中有檔案{標記:30}但小於標誌:30。

如果我使用的查詢:

{archive:{$elemMatch:{ mark:{$lte:30}}} 

將獲得與2,3

文件如果我的用戶查詢:

{archive:{$elemMatch:{ mark:{$lte:30,$in:[30]}}} 

將獲得1,2。

如何獲取文檔2? 謝謝!

+0

如果一個看起來像這樣的文件:'{檔案:[{ '標記':30}]}'?查詢是否也要返回該文檔? – styvane

+0

@Styvane是的,但最好的答案是 – govo

回答

2

你可以試着查詢這將符合邏輯

匹配的文件,其中archive{ "mark": 30 }markNOT 大於30(相同小於或等於30):

db.collection.find({ 
    "archive.mark": { 
     "$eq": 30, 
     "$not": { "$gt": 30 } 
    } 
}) 

或使用$and運算符明確指定爲

db.collection.find({ 
    "$and": [ 
     { "archive.mark": 30 }, 
     { "archive.mark": { "$not": { 
      "$gt": 30 
     } } } 
    ]  
}) 
+1

Greate!謝謝! – govo

0

隨着$ elemMatch

db.getCollection('yourCollection').find(
{ 
    archive: { 
     $elemMatch: { 
      $and: [ 
      { mark: { $eq: 30 }}, 
      { mark: { $lte: 30 }}, 
      { mark: { $not: { $gt: 30 } } } 
      ] 
     } 
    } 
}) 
+0

這還是得到文件1 – govo