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

V MongoDB hledejte v poli a seřaďte podle počtu shod

Ano, je to možné pomocí Agregation Framework.

Předpoklady

  • Tady použitá datová sada je stejná jako v části Získat dokumenty se značkami v seznamu, seřazená podle celkového počtu shod
  • tags atribut je množina (žádné opakované prvky)

Dotaz

Tento přístup vás nutí odvíjet výsledky a přehodnotit predikát zápasu s nevinutými výsledky, takže je opravdu neefektivní.

db.test_col.aggregate(
    {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
    {$unwind: "$tags"}, 
    {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
    {$group: {
        _id:{"_id":1}, 
        matches:{$sum:1}
    }}, 
    {$sort:{matches:-1}}
);

Očekávané výsledky

{
    "result" : [
        {
            "_id" : {
                "_id" : ObjectId("5051f1786a64bd2c54918b26")
            },
            "matches" : 3
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1726a64bd2c54918b24")
            },
            "matches" : 2
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1756a64bd2c54918b25")
            },
            "matches" : 1
        }
    ],
    "ok" : 1
}


  1. Existuje nějaký způsob, jak atomicky aktualizovat dvě sbírky v MongoDB?

  2. jak nakonfigurovat různé ttl pro každou mezipaměť redis při použití @cacheable ve springboot2.0

  3. Rails Redis nastavení maxmemory a maxmemory-policy

  4. Aktualizujte objekty vnořených polí na základě vlastnosti v MongoDB