MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoid-Abfragedatenbank nach virtuellem Attribut

Sie können dies in MongoDB mit Aggregation Framework tun (neu in Version 2.2).

Sie müssen das Array der Communitys des Benutzers zur Verfügung haben. Ich werde es in diesem Beispiel userComms nennen - ich erwarte, dass es ein Array mit denselben Werten wie posts.communities ist.

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

Dies gibt ein Dokument der Form:

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

Das Ergebnis-Array enthält _ids von Posts und relevant, wie berechnet durch Hinzufügen der Anzahl von Communities, die sie mit dem Benutzer gemeinsam hatten. Dann wird nach dieser Summe (absteigend) sortiert.