sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoid Query DB av Virtual Attribute

Du kan göra detta i mongoDB med Aggregation Framework (ny i version 2.2).

Du måste ha en mängd användargrupper tillgängliga. Jag kallar det userComms i det här exemplet - jag förväntar mig att det ska vara en array med samma typ av värden som posts.communities är.

db.posts.aggregate( [
    {
        "$unwind" : "$communities"
    },
    {
        "$match" : {
            "communities" : {
                "$in" : userComms
            }
        }
    },
    {
        "$group" : {
            "_id" : "$_id",
            "relevance" : {
                "$sum" : 1
            }
        }
    },
    {
        "$sort" : {
            "relevance" : -1
        }
    }
]);

Detta returnerar ett dokument av formen:

{
    "result" : [
        {
            "_id" : 1,
            "relevance" : 4
        },
        {
            "_id" : 6,
            "relevance" : 3
        },
...
        ]
}

Resultatmatrisen innehåller _id för inlägg och relevanta som beräknat genom att lägga till antalet gemenskaper de hade gemensamt med användaren. Sedan sorteras den (fallande) efter den summan.




  1. Aggregering per år och månad i MongoDB

  2. Välj kapslade fält i mongo db

  3. Begränsa insatser i mongodb

  4. Det gick inte att köra Mongodb