MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongoid Query DB par attribut virtuel

Vous pouvez le faire dans mongoDB en utilisant Aggregation Framework (nouveau dans la version 2.2).

Vous devez disposer du tableau des communautés d'utilisateurs. Je l'appellerai userComms dans cet exemple - je m'attends à ce qu'il s'agisse d'un tableau avec le même type de valeurs que posts.communities.

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

Cela renvoie un document de la forme :

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

Le tableau de résultats contient des _ids de messages et pertinents tels que calculés en ajoutant le nombre de communautés qu'ils avaient en commun avec l'utilisateur. Ensuite, il est trié (décroissant) par cette somme.