MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment obtenir les derniers N enregistrements de chaque groupe dans mongodb ?

Dans mongoDB 3.2 vous pouvez effectuer cela en utilisant la requête agrégée du formulaire suivant :

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

Il est très difficile d'obtenir la même chose avec mongoDB 3.0. Un truc très sale est là pour y parvenir en 3.0. Cela implique quelques étapes et d'autres collectes.

Faites d'abord un agrégat et affichez le résultat dans une collection temporaire appelée 'aggr_out'

Requête :

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

En utilisant la requête ci-dessus, mostRecentTitle aura tous les titres récents commandés à partir de l'index 0, 1, 2, ... Si vous êtes satisfait de ce résultat en utilisant ceci car vous avez déjà le résultat dans les index 0,1 et 2 de mostRecentTitle. Les autres titres peuvent être simplement ignorés côté application.

Toujours si vous n'êtes pas satisfait, faites une mise à jour sur la collection de sortie 'aggr_out' et lisez les données de cette collection. La requête est,

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

L'opération ci-dessus découpera le tableau mostRecentTitle afin qu'il ait les trois titres les plus récents. Faites une lecture sur cette collection pour obtenir le résultat souhaité.