2017-09-10 3 views
0

ich eine Dokumentstruktur wie diese in der Sammlung haben ‚mycoll‘:MongoDB finden Daten aus verschachtelten Dokument

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

Ich möchte über alle Dokumente finden orderid wo products.name wie ‚fünfte‘ ist. bitte hilf mir bei der mongo-frage?

+0

Ich habe versucht mit db.getCollection ('mycoll'). Find ({'products.name': 'fünftes prod'}), nur um zu sehen, ob es genau die Datensätze übereinstimmt, aber das ist nicht Ausgabe zurückgeben. –

+0

Ihre Struktur ist fehlerhaft. Sie möchten wahrscheinlich wirklich als "Produkte" speichern: [{"pid": "1", "name": "erster prod"}, {"pId": "5", "name": "fünfter prod" }] '. So speicherst du entweder wie du irrtümlich oder ohne die Einschränkung zu verstehen. Das Ändern des Pfads mit benannten Schlüsseln wird nicht empfohlen und ist für Datenbanken nicht effizient. Stellen Sie konsistente Pfade her, die einfach abgefragt werden können. –

Antwort

0

db.getCollection ('mycoll') finden. ({Produkte: {$ elemMatch: {name: 'fünfte prod'}}})

$ elemMatch ermöglicht es Ihnen, mehr als eine passen Komponente innerhalb desselben Array-Elements.

Weiter, wenn Sie das Verhalten von wie haben wollen, können Sie weitermachen und das Regex/Muster im Vorwärts- und Rückwärtsslash verwenden. /.../

+0

das funktioniert nicht für mich. –

+0

@veena ist es möglich, dass Sie die Schemaänderungen wie von Neil in den obigen Kommentaren vorgeschlagen haben. Der Grund dafür ist, dass der Pfadzugriff auf Arrays, der in Ihrem Fall eingegeben wurde, nicht funktioniert. Versuchen Sie, die Schlüssel als Teil des Feldes array elements zu erstellen. – Rizwan

Verwandte Themen