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

Mongoid Query DB per attributo virtuale

Puoi farlo in mongoDB usando Aggregation Framework (nuovo nella versione 2.2).

Devi avere a disposizione la gamma di comunità di utenti. Lo chiamerò userComms in questo esempio:mi aspetto che sia un array con lo stesso tipo di valori di posts.communities.

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

Questo restituisce un documento della forma:

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

L'array di risultati contiene _ids di post e rilevanti come calcolato sommando il numero di comunità che avevano in comune con l'utente. Quindi viene ordinato (decrescente) in base a quella somma.