MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zdobyć najnowsze rekordy N każdej grupy w mongodb?

W mongoDB 3.2 możesz to zrobić za pomocą zapytania zbiorczego o następującej formie:

db.collection.aggregate(
  {$sort: {created: -1}},
  {$group: {_id:'$city', title:{$push: '$title'}},
  {$project: {_id:0, city: '$_id', mostRecentTitle: {$slice: ['$title', 0, 2]}}}
)

Bardzo trudno jest osiągnąć to samo za pomocą mongoDB 3.0. Aby to osiągnąć w wersji 3.0, istnieje bardzo brudna sztuczka. Obejmuje kilka kroków i inną kolekcję.

Najpierw wykonaj agregację i wyślij wynik do tymczasowej kolekcji o nazwie 'aggr_out'

Zapytanie:

db.collection.aggregate([
  {$sort: {created: -1}},
  {$group: {_id:'$city', title:{$push: '$title'}},
  {$project: {city: '$_id', mostRecentTitle: '$title'}},
  {$out: 'aggr_out'}]
)

Używając powyższego zapytania, mostRecentTitle będzie miał wszystkie ostatnie tytuły uporządkowane według indeksu 0, 1, 2, ... Jeśli jesteś zadowolony z tego wyniku, używając tego, ponieważ masz już wynik w indeksach 0,1 i 2 mostRecentTitle. Inne tytuły można po prostu zignorować po stronie aplikacji.

Jeśli jednak nie jesteś zadowolony, zaktualizuj kolekcję danych wyjściowych 'aggr_out' i odczytaj dane z tej kolekcji. Zapytanie brzmi,

db.aggr_out.update(
  {},
  {$push: {
    mostRecentTitle: {$each:[], $slice:3}
    }
  }
)

Powyższa operacja podzieli tablicę mostRecentTitle tak, aby zawierała trzy najnowsze tytuły. Przeczytaj tę kolekcję, aby uzyskać pożądany rezultat.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Przechowywanie obiektu Json w kluczu Mongoose String

  2. Usuwanie klucza/wartości z istniejącego wpisu MongoDB

  3. Jak zapisać tablicę wejść do schematu podrzędnego w zagnieżdżonym schemacie mangusty?

  4. Jak wyszukiwać tekst w mgo?

  5. Zapobieganie wstrzykiwaniu JavaScript NoSQL w MongoDB