2016-05-11 8 views
1

wenn ein Array Filterung ist es möglich:mongodb: array Filterung durch den Index oder ein anderes Feld

  1. Filter nach Elementindex (zum Beispiel alle Array-Elemente erhalten, aber die ersten)?

  2. Filter nach Wert in einem anderen Feld innerhalb des gleichen Dokuments, das das Array-Feld enthält?

Betrachten Dokument:

{ 
    _id: 1, 
    first_seen_on: 20160312, 
    seen_on: [20160312, 20160313, 20160324] 
} 

ich die seen_on Array brauchen, um sich [20160313, 20160324]

Dies scheint nicht zu funktionieren (ich glaube, $first_seen_on als Literalwert behandelt) :

 'repeats': { 
      '$filter': { 
       'input': '$seen_on', 
       'as': 'date', 
       'cond': {'$ne': ['$date', '$first_seen_on']} 
      } 
+0

folgt, wenn Sie Filtern sagen, lesen Sie in die Filterstufe in der Aggregation Pipeline? – lesingerouge

+0

Filtern eines Arrays, wie im Beispielcode, den ich eingefügt habe, in der Projektstufe der Aggregationspipeline. –

Antwort

1

Verwenden $setDifference als

db.collection.aggregate([ 
    { 
     "$project": { 
      "repeats": { 
       "$setDifference": ["$seen_on", ["$first_seen_on"]] 
      } 
     } 
    } 
]) 

Beispielausgabe

/* 1 */ 
{ 
    "_id" : 1, 
    "repeats" : [ 
     20160313, 
     20160324 
    ] 
} 
Verwandte Themen