2016-08-11 17 views
5

Szukam sposobu, aby uzyskać dwie najwyższe liczby (lub dowolną inną liczbę) z określonego elementu z danej kolekcji.Jak zachować najwyższą liczbę elementów tablicy w mongoDB?

{"id": "xyz" , "fruits": ["Apple", "Mango"]} 
{"id": "abx", "fruits": ["Apple", "Banana"]} 
{"id" : "pqr", "fruits": ["Apple", "Mango"]} 

Na powyższym przykładzie wynik to: Apple and Mango ponieważ występowanie Apple (trzy razy), a następnie jest wyższa Mango (dwa razy). Czy muszę korzystać z funkcji Mongo map-reduce?

Jestem bardziej nastawiony na wydajność i stabilność platformy backendowej. Jak mogę iść do przodu, jeśli "liczba zdarzeń" ma miejsce w czasie rzeczywistym?

Każda pomoc byłaby znacząca.

Odpowiedz

2

Można użyć agregatu. Oto prosty przykład, który zakłada, że ​​wartość owoce nie będą powtarzane w obrębie jednego dokumentu:

[ 
    { 
     $unwind: "$fruits" 
    }, 
    { 
     $group: { 
      _id: "$fruits", 
      count: {$sum: 1} 
     } 
    }, 
    { 
     $sort: {count:-1} 
    }, 
    { 
     $limit: 2 
    } 
] 
+1

Dla wydajności może chcesz projektu „owoce” i wyłącz „_id” jako pierwszy krok, ponieważ może korzystać z indeksów lepszy –

Powiązane problemy