sql >> Database teknologi >  >> NoSQL >> MongoDB

I MongoDB søg i et array og sorter efter antal matches

Ja, det er muligt at bruge Aggregation Framework.

Antagelser

  • Datasættet, der bruges her, er det samme, som bruges i Hent dokumenter med tags på listen, sorteret efter det samlede antal match
  • tags attribut er et sæt (ingen gentagne elementer)

Forespørgsel

Denne tilgang tvinger dig til at afvikle resultaterne og revurdere kampprædikatet med afviklede resultater, så det er virkelig 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}}
);

Forventede resultater

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


  1. kortlægning i oprette indeks i elasticsearch gennem mongodb-floden træder ikke i kraft

  2. Brug mock MongoDB-server til enhedstest

  3. Transaktioner og uropgørelse i Redis

  4. Får indstillingen slave-read-only nej til at få slave til at bekræfte hvert hash-opslag med masteren?