2017-09-10 1 views
0

J'ai une structure de document comme celui-ci dans la collection « mycoll »:MongoDB trouver des données du document imbriqué

{ 
"orderid" : "123", 
    "products" : { 
     "1" : [ 
      { 
       "pId" : "1", 
       "name":"first prod" 
      } 
     ], 
     "5" : [ 
      { 
       "pId" : "5", 
       "name":"fifth prod" 
      } 
     ] 
    } 
} 

Je veux trouver orderid dans tous les documents où products.name est comme « cinquième ». s'il vous plaît aidez-moi avec la requête mongo?

+0

J'ai essayé avec db.getCollection ('mycoll'). Find ({'products.name': 'fifth prod'}), juste pour voir si elle correspond exactement aux enregistrements mais ce n'est pas renvoyer toute sortie. –

+0

Votre structure est défectueuse. Vous voudrez probablement stocker à la place comme '' products ": [{" pid ":" 1 "," name ":" premier prod "}, {" pID ":" 5 "," name ":" cinquième prod " }] '. Donc, vous avez soit stocké comment vous avez dans l'erreur ou sans comprendre la limitation. La modification du chemin avec des clés nommées n'est pas recommandée et n'est pas efficace pour les bases de données. Créez des chemins cohérents qui sont simples à interroger à la place. –

Répondre

0

db.getCollection ('mycoll') trouver. ({Produits: {$ elemMatch: {name: 'cinquième prod'}}})

$ elemMatch vous permet de faire correspondre plus d'un composant dans le même élément de tableau. En outre, si vous souhaitez avoir le comportement comme, vous pouvez continuer et utiliser l'expression régulière/motif à l'intérieur des barres obliques avant et arrière. /.../

+0

cela ne fonctionne pas pour moi. –

+0

@veena est-il possible pour vous d'avoir les changements de schéma comme suggéré par Neil dans les commentaires ci-dessus. La raison d'être au-dessus de l'échec de la requête est le chemin d'accès aux tableaux qui est entré dans votre cas ne fonctionnerait pas. Essayez de créer les clés dans le champ des éléments du tableau. – Rizwan