sql >> Databasteknik >  >> NoSQL >> MongoDB

Sök i MongoDB i en array och sortera efter antal matchningar

Ja, det är möjligt att använda Aggregation Framework.

Antaganden

  • Datauppsättningen som används här är densamma som används i Hämta dokument med taggar i listan, sorterade efter totalt antal matchningar
  • tags attribut är en uppsättning (inga upprepade element)

Fråga

Detta tillvägagångssätt tvingar dig att varva ner resultaten och omvärdera matchpredikatet med oavbrutna resultat, så det är verkligen ineffektivt.

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}}
);

Förväntade resultat

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


  1. Skicka meddelanden till grupper i Django Channels 2

  2. Tillvägagångssätt för säkerhetskopiering och katastrofåterställning i HBase

  3. MongoDB databas kryptering

  4. Hur sparar och hämtar man sträng med accenter i redis?