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

Mongodb vybere všechna pole seskupit podle jednoho pole a seřadit podle jiného pole

To, co chcete, je něco, čeho lze dosáhnout pomocí agregačního rámce. Základní forma ( která je užitečná pro ostatní ) je:

db.collection.aggregate([

    // Group by the grouping key, but keep the valid values
    { "$group": {
        "_id": "$chainId",
        "docId": { "$first": "$_id" },
        "messageId": { "$first": "$messageId" },
        "createOn": { "$first": "$createdOn" }
    }},

    // Then sort
    { "$sort": { "createOn": -1 } }

])

Takže se "seskupí" na odlišných hodnotách "messageId" při použití $first hraniční hodnoty pro každé z ostatních polí. Případně, pokud chcete největší, použijte $last místo toho, ale pro nejmenší nebo největší podle řádku má pravděpodobně smysl $sort nejprve, jinak stačí použít $ min a $max pokud není důležitý celý řádek.

Podívejte se na MongoDB aggregate() dokumentaci pro více informací o použití a také dokumentaci ovladače JavaDocs a konektoru SpringData Mongo pro větší využití agregační metody a možných pomocníků.



  1. MongoDB count() versus countDocuments()

  2. Chyba Pymongo pro ArrayFilters při aktualizaci více vnořených dokumentů

  3. připojit ECONNREFUSED 127.0.0.1:27017'

  4. Jedinečné omezení se dvěma poli v MongoDB