2016-07-01 3 views
1

Ich habe so etwas wie unten:Wie überprüft man, ob verschachtelte Arrays ALLE in mongodb leer sind?

{ 
     "_id" : "1", 
     "firstArray" : [ 
       { 
         "_id" : "11", 
         "secondArray" : [ ] 
       }, 
       { 
         "_id" : "12", 
         "secondArray" : [ ] 
       }, 
       { 
         "_id" : "13", 
         "secondArray" : [ { "type" : "somthing" } ] 
       } 
     ] 

}, 
{ 
     "_id" : "2", 
     "firstArray" : [ 
       { 
         "_id" : "21", 
         "secondArray" : [ ] 
       }, 
       { 
         "_id" : "22", 
         "secondArray" : [ ] 
       } 
     ] 

} 

Ich brauche eine mongodb Abfrage Dokumente zu finden, die alle verschachtelten secondArrays leer sind? Die Abfrage sollte das zweite Dokument und nicht das erste Dokument zurückgeben.

Antwort

0

um das zu lösen, müssen wir die Größe von arr2 überprüfen, aber um zu ermöglichen, dass wir zuerst arr1 abwickeln müssen.

finden Sie unter Aggregation Rahmen Schnipsel, die dieses Problem löst,

db.pmoubed.aggregate([{ 
      $unwind : "$firstArray" 
     }, { 
      $project : { 
       _id : 1, 
       firstArray : 1, 
       isNotEmpty : { 
        $size : "$firstArray.secondArray" 
       } 
      } 
     }, { 
      $group : { 
       _id : "$_id", 
       isNotEmpty : { 
        $sum : "$isNotEmpty" 
       }, 
       firstArray : { 
        $push : "$firstArray" 
       } 
      } 
     }, { 
      $match : { 
       "isNotEmpty" : 0 
      } 
     } 

    ]) 

Alle Kommentare willkommen

+0

Ich habe dies: Aggregat ist fehlgeschlagen: { "errmsg": „Ausnahme: ungültige Operator '$ size' ", " code ": 15999, " ok ": 0 } bei src/mongo/shell/collection.js: 898 – PMoubed

+0

welche version von mongo verwenden sie? – profesor79

+0

MongoDB Shell-Version: 2.4.14 – PMoubed

Verwandte Themen