2013-10-03 39 views
0

我使用的是mongodb 2.4.6版本。 我有以下記錄在名爲「MyCollection的」如何從mongo數組結構化記錄中獲取多個元素匹配元素

{ 
     "_id" : ObjectId("524d3eb224bfcc31614ec8ef"), 
     "symbol" : "JACK", 
     "option_exp" : [ 
       { 
         "dateexpiration" : "2014-03-22", 
         "total_strikes" : 18, 
         "options" : [ 
           { 
             "pricevalue" : "22.5", 
             "premium" : "100" 
           }, 
           { 
             "pricevalue" : "60.0", 
             "premium" : "100" 
           } 
         ] 
       }, 
       { 
         "dateexpiration" : "2014-03-22", 
         "total_strikes" : 30, 
         "options" : [ 
           { 
             "pricevalue" : "122.5", 
             "premium" : "34" 
           }, 
           { 
             "pricevalue" : "60.0", 
             "premium" : "100" 
           } 
         ] 
       }, 
       { 
         "dateexpiration" : "2013-12-21", 
         "total_strikes" : 16, 
         "options" : [ 
           { 
             "pricevalue" : "20.0", 
             "premium" : "100" 
           }, 
           { 
             "pricevalue" : "22.5", 
             "premium" : "100" 
           } 
         ] 
       } 
     ] 
} 

我想要檢索的所有記錄belogging到特定dateexpiration日期我的收藏之一。

我試過下面的方式,但它的returing整個文件結構。

db.mycollection.find({ "symbol" : "JACK" ,"option_exp.dateexpiration" : "2014-03-22"}).pretty() 

這下面是給我的錯誤SyntaxError:意外的標記。

db.mycollection.find({ "symbol" : "JACK" ,"option_exp.dateexpiration" : "2014-03-22"},{option_exp.$:1}).pretty() 
+0

您可以返回第一個匹配或文檔的所有。您無法過濾Mongodb中當前的特定數組元素。如果您將它們存儲爲實際文檔,則查詢起來很麻煩。 – WiredPrairie

回答

0

嘗試使用$elemMatch

db.collection.find({ option_exp: { $elemMatch: { dateexpiration: "2014-03-22" } } }); 
+0

感謝您的查詢,當我執行上述操作時,仍然獲取所有數據(屬於不同datexpirations的數據) – Pawan

1

嘗試聚合功能,像這樣:

db.mycollection.aggregate([ 
    {$unwind: '$option_exp'}, 
    {$match: {'symbol': 'JACK', 'option_exp.dateexpiration':'2014-03-22'}} 
]) 
相關問題