2016-06-15 7 views
1

Wie kann ich das Dokument finden, das das angegebene JSON-Objekt enthält?Abfrage von Dokumenten in MongoDB nach Objektabgleich

Beispiel:

nehme an, dass in der Datenbank test es ein Dokument ist wie folgt:

{ 
    "identification": { 
    "componentId": "3a4f6199-6141-4179-ac5f-f1bbcf627bb2", 
    "componentType": "PivotTable", 
    "dataDate": "2016-06-15T15:29:51.139+0200", 
    "dataType": "PTF", 
    "properties": { 
     "contextId": "0329fe70-92f0-4b60-b3c2-79377adb8f95", 
     "tags": ["tag1", "tag2"] 
    } 
    }, 
    "viewData": { 
    "lineGroups": [] 
    } 
} 

Jetzt nur die identification Teil des Dokuments mit Teilschlüssel-Set mit Wert gegeben:

{ 
    "componentType": "PivotTable", 
    "properties": { 
     "tags": ["tag1"] 
    } 
} 

Da das Identifikationsteil des obigen Dokuments mit der angegebenen Identifikation übereinstimmt, sollte dieses Dokument zurückgegeben werden.

Wenn ich db.test.find({identification: {/*the given identification segment*/}}) mache, vergleicht mongodb direkt den Identifizierungsteil, indem er genau jeden Eintrag im Dokument überprüft. In diesem Fall wird dieses Dokument nicht zurückgegeben.

Gibt es einen Weg in mongodb Abfragesprache, die es mir erlaubt, dies relativ einfach oder einfach zu tun? Oder muss ich die Einträge im Identification-Objekt rekursiv analysieren, um eine Abfrage zu erstellen?

Antwort

0

Mongo wird versuchen, GANZE Eigenschaften Unterdokument, übereinstimmen, so in diesem Fall müssen wir 1: 1 Dokument liefern.

Die Art und Weise, wie Sie versuchen konnten, dies zum Laufen zu bringen, ist das Abwickeln jedes Elements und das Hinzufügen zum Abfragefilterbereich.

{ 
    "componentType": "PivotTable", 
    "properties.tags": {$in:["tag1"]}  
} 
+0

So auf diese Weise muss ich noch eine Abfragezeichenfolge durch Analysieren der Einträge im Filialdokument erstellen. Kein einfacher Weg? Da, wenn die Subdoucement-Struktur komplex wird (ein anderes Filialdokument mit verschiedenen Typen von Werten enthält), wird das Konstruieren der Abfrage nicht so einfach. – qingl97

+0

ja ..... das ist das Spiel :-) – profesor79

+0

@ qingl97 Wenn meine Antwort Ihnen geholfen hat, bitte akzeptieren Sie es sehen: http://stackoverflow.com/help/accepted-answer – profesor79

Verwandte Themen