sql >> Database >  >> NoSQL >> MongoDB

Zoek in MongoDB in een array en sorteer op aantal overeenkomsten

Ja, het is mogelijk met behulp van Aggregation Framework.

Aannames

  • De dataset die hier wordt gebruikt, is dezelfde die wordt gebruikt in Documenten ophalen met tags in lijst, gerangschikt op totaal aantal overeenkomsten
  • tags attribuut is een set (geen herhaalde elementen)

Zoekopdracht

Deze aanpak dwingt je om de resultaten af ​​te wikkelen en het wedstrijdpredikaat opnieuw te evalueren met afgewikkelde resultaten, dus het is echt inefficiënt.

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

Verwachte resultaten

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


  1. Online Apache HBase-back-ups met CopyTable

  2. Hoe een array van objecten in een array in mangoest te duwen met één oproep?

  3. Hoe maak ik een MongoDB-dump van mijn database?

  4. Moet ik JWT-tokens in redis opslaan?