2017-10-11 5 views
0

folgenden beiden Dokumente vor:Gruppe Arrayelemente zählen Vorkommen

{ "name" : "test1", "source" : ["Apple","Cherry"], "dest" : ["Banana", "Durian"]} 
{ "name" : "test2", "source" : ["Melon","Fig"], "dest" : ["Apple"]}] 

Eingangs

["Apple","Orange","Fig"] 

Erwartete Ausgabe

{ "_id" : "Apple", nameList : ["test1", "test2"] } 
{ "_id" : "Fig", nameList : ["test2"] } 
{ "_id" : "Orange", nameList : [] } 

Aggregation

db.getCollection<name>.aggregate([ 
    { "$match" : <some_matching_conditions>}, 
    { "$project" : 
      { "$project" : { "input_array" : { "$literal" : ["Apple","Orange","Fig"]} }}, 
      { "obj" : {"$setUnion" : ["$source", "$dest"]}}, 
    }, 
    { "$unwind" : "$aray"}, 
    { "$match" : { "aray" : { "$in" : "$obj"}}}, 
    { "$group" : <grouping_conditons>} 
]) 
+0

Fehler: "errmsg": "Ausnahme: schlechte Abfrage: BadValue $ in braucht ein Array" – Bala

Antwort

0

Sie können unter Aggregation versuchen.

db.collection_name.aggregate([ 
    { 
    "$project": { 
     "name": 1, 
     "farray": { 
     "$setIntersection": [ 
      { 
      "$concatArrays": [ 
       "$source", 
       "$dest" 
      ] 
      }, 
      input_array 
     ] 
     } 
    } 
    }, 
    { 
    "$unwind":"$farray" 
    }, 
    { 
    "$group": { 
     "_id": "$farray", 
     "namelist": { 
     "$push": "$name" 
     } 
    } 
    } 
])