sql >> Databáze >  >> NoSQL >> MongoDB

Jak získat posledních N záznamů každé skupiny v mongodb?

V mongoDB 3.2 můžete to provést pomocí agregačního dotazu následujícího formuláře:

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

Je velmi obtížné dosáhnout stejného pomocí mongoDB 3.0. Existuje velmi špinavý trik, jak toho dosáhnout ve 3.0. Zahrnuje několik kroků a další sběr.

Nejprve proveďte agregaci a výsledek vytiskněte do dočasné kolekce s názvem 'aggr_out'

Dotaz:

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

Pomocí výše uvedeného dotazu bude mít mostRecentTitle všechny poslední názvy seřazené z indexu 0, 1, 2, ... Pokud jste s tímto výsledkem spokojeni, protože již máte výsledek v indexech 0,1 a 2 mostuRecentTitle. Ostatní názvy lze na straně aplikace jednoduše ignorovat.

Pokud přesto nejste spokojeni, proveďte aktualizaci výstupní kolekce 'aggr_out' a přečtěte si data z této kolekce. Dotaz je,

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

Výše uvedená operace rozdělí pole mostRecentTitle tak, aby obsahovalo poslední tři tituly. Přečtěte si tuto kolekci, abyste dosáhli požadovaného výsledku.




  1. 5 způsobů, jak vybrat řádky s minimální hodnotou pro jejich skupinu v SQL

  2. MongoDB dostupná připojení

  3. Mongodb $in proti poli objektů pole namísto objektů pole

  4. Kde je log soubor mongodb v mac