MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Mongoid Query DB por Atributo Virtual


Você pode fazer isso no mongoDB usando Aggregation Framework (novo na versão 2.2).

Você precisa ter a matriz de comunidades de usuários disponíveis. Vou chamá-lo de userComms neste exemplo - espero que seja um array com o mesmo tipo de valores que posts.communities são.
db.posts.aggregate( [
    {
        "$unwind" : "$communities"
    },
    {
        "$match" : {
            "communities" : {
                "$in" : userComms
            }
        }
    },
    {
        "$group" : {
            "_id" : "$_id",
            "relevance" : {
                "$sum" : 1
            }
        }
    },
    {
        "$sort" : {
            "relevance" : -1
        }
    }
]);

Isso retorna um documento do formulário:
{
    "result" : [
        {
            "_id" : 1,
            "relevance" : 4
        },
        {
            "_id" : 6,
            "relevance" : 3
        },
...
        ]
}

A matriz de resultados contém _ids de postagens e relevantes conforme calculado adicionando o número de comunidades que elas tinham em comum com o usuário. Em seguida, é classificado (decrescente) por essa soma.