2017-11-23 1 views
0

i Sammlung in so genannt haben 'Test' ist ein Dokument, wie:Suche verschachtelte Array-Elemente in mongodb

{ 
"_id" : 1 
"letters" : [ 
     [ "A", "B" ], 
     [ "C", "D" ], 
     [ "A", "E", "B", "F" ] 
    ] 
} 

wenn ich so suchen:

db.getCollection('test').find({"_id" : 1}, {"letters": ["A", "B"] }) 

dann wird es den Rekord holen .

{ 
"_id" : 1 
"letters" : [ 
     [ "A", "B" ], 
     [ "C", "D" ], 
     [ "A", "E", "B", "F" ] 
    ] 
} 

wenn ich so suchen:

db.getCollection('test').find({"_id" : 1}, {"letters": ["B", "A"] }) 

es nicht den Rekord nicht holen

mein requirment ist, wenn im wie diese gibt auch ([ "B", "A"]), muss es das Dokument holen. Weil die gleichen Buchstaben bereits im Array vorhanden sind.

werde ich alle Betreiber mit $ versuchen, aber es funktioniert auch den Rekord jemand nicht

db.getCollection('test').find({"_id" : 1}, {"letters": {$all: ["B", "A"]} }) 

jetzt ist es nicht bitte die Lösung geben kann

könnte holen wird.

+0

Wenn Sie update verwenden, ist dieser zweite Parameter nicht Ihre Bedingung –

+0

OP: Sie haben hier zwei verschiedene Dinge vor sich: Update und Abfrage. Vielleicht können Sie sie trennen und Ihre gewünschte Ausgabe beschreiben? –

+0

überprüfen Sie dies [wie Reihenfolge der Array mit Mongodb ändern] (https://stackoverflow.com/questions/35810951/how-to-change-order-of-array-with-mongodb) – godsenal

Antwort

0

Sie können etwas tun:

db.test.find(
     { 
     "$and":[ 
     {"_id" : ObjectId("5a16674b4828c9f51d3b3a18")}, 
     {"$or":[{"letters": ["A", "B"] },{"letters": ["B", "A"] }]} 
       ] 
     } 
    ) 

Jetzt wird das Dokument suchen, die ["A","B"] OR ["B","A"] hat.

+0

Während dies funktioniert, wenn die Um die Anzahl der Buchstaben zu erhöhen, wird diese Lösung zu komplex. –

0
db.getCollection('test').find(
     { 
      "_id" : 1, 
      'letters':{ 
       $elemMatch:{ 
        $elemMatch:{ 
         $in:['B','A'] 
        } 
       } 
      } 
     } 
    ) 

Diese Abfrage alle Dokumente finden, die Sie in den letzten $ in der Nähe angeben Array-Elemente hat, Beispiel Es demselben Dokument finden, wenn Sie in $ angeben: [ ‚C‘] oder in $ : ['B', 'A']