2013-08-21 3 views
1

J'ai la structure suivante dans mon MongoDB. J'ai une structure imbriquée de ma collection nommée chaînes qui est montrée ci-dessous. J'essaie d'accéder aux options d'une date particulière comme indiqué ci-dessous qui est 2015-01-17 dans mon cas. Mais la requête suivante ci-dessus me renvoie toutes les données relatives à ce symbole.Comment accéder aux données d'une collection structurée de tableaux imbriqués

{ 
     "_id" : ObjectId("52000a90d293b0e4134e8c35"), 
     "symbol" : "UBSC", 
     "option_exp" : [ 
       { 
         "expiration_dt" : "2015-01-17", 
          "options" : [ 
           { 
             "mult" : "10" 
           }, 
           { 
             "mult" : "10" 
           } 
         ] 
        }, 
         { 
         "expiration_dt" : "2014-01-18", 
         "options" : [ 
           { 

             "prem_mult" : "10" 
           }, 
           { 
             "prem_mult" : "10" 
           } 

      } 
         ] 
       } 
     ], 
} 

C'est la façon dont j'ai essayé d'accéder via java

BasicDBObject query = new BasicDBObject(); 
query.append("symbol", "UBSC"); 
query.append("option_exp.expiration_dt", "2015-01-17"); 

Quelqu'un pourrait me aider s'il vous plaît comment accéder aux données d'une date donnée.

Répondre

2

Utilisez $elemMatch pour limiter le contenu du option_exp champ tableau qui est inclus dans le résultat:

db.chains.find({symbol : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"}, 
       {option_exp: {$elemMatch: {expiration_dt: "2015-01-17"}}}) 

Cela permet de sélectionner les documents qui ont le symbole égal à « UBSC » et option_exp éléments du tableau avec expiration_dt égal à « 2015-01 -17 ". Ensuite, nous limitons le contenu du tableau option_exp aux éléments dont la date d'expiration est requise (sinon, le document entier renverra tous les éléments option_exp).

+0

hé merci j'ai essayé cette option que vous avez mentionnée, mais malheureusement je recevais cette erreur d'erreur ci-dessous: {"$ err": "Option de projection non supportée: $ elemMatch", "code": 13097}, j'utilisais mongo1.6 version – Pawan

+0

Je vois qu'elemMatch est supporté depuis la version 2.2, il y a donc d'autres alternatives pour y arriver. – Pawan

+1

Avant 2.2, vous deviez le faire dans votre code après que le document apparié est venu sur le fil. – Ross

Questions connexes