2015-01-26 11 views
27

Mam zbiór dokumentów:MongoDB find() zapytanie: return tylko unikatowe wartości (bez duplikaty)

{ 
    "networkID": "myNetwork1", 
    "pointID": "point001", 
    "param": "param1" 
} 
{ 
    "networkID": "myNetwork2", 
    "pointID": "point002", 
    "param": "param2" 
} 
{ 
    "networkID": "myNetwork1", 
    "pointID": "point003", 
    "param": "param3" 
} 
... 

pointIDs są unikalne ale networkIDs nie.

Czy to możliwe, aby zapytać MongoDB w taki sposób, że wynik będzie: [myNetwork1, myNetwork2]

teraz tylko udało mi się powrócić [myNetwork1, myNetwork2, myNetwork1]

muszę lista unikalnych identyfikatorów sieciowych do zapełniania autouzupełniania komponentu select2. Ponieważ mogę mieć do 50 KB dokumentów, wolałbym, aby mongoDb filtrował wyniki na poziomie zapytania.

Odpowiedz

63

myślę, że można użyć db.collection.distinct(fields,query)

Będziesz w stanie uzyskać różne wartości w danym przypadku dla IDENTYFIKATORSIECI.

To powinno być coś takiego:

Db.collection.distinct('NetworkID') 
+15

Co jeśli chcę uzyskać pełny rekord? Zwróci to tylko 'NetworkID'. –

+4

@HalfBloodPrince, jaki pełny rekord? 'distinct' zwraca wszystkie unikalne wartości dla pola. Zwracanie rekordu lub rekordów nie ma sensu w tym kontekście. Będziesz musiał użyć potoku agregacji ['$ group' operator] (https://docs.mongodb.com/manual/reference/operator/aggregation/group/) dla różnych + rekordów. – Paul

+1

@HalfBloodPrince: jeśli chcesz uzyskać pełny zapis, zajrzyj na https://stackoverflow.com/a/44887521/1587329 –

Powiązane problemy