sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoid Query DB por atributo virtual

Puede hacer esto en mongoDB usando Marco de agregación (nuevo en la versión 2.2).

Debe tener disponible la matriz de comunidades de usuarios. Lo llamaré userComms en este ejemplo. Espero que sea una matriz con el mismo tipo de valores que son posts.communities.

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

Esto devuelve un documento de la forma:

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

La matriz de resultados contiene _ids de publicaciones y relevantes según se calcula al agregar la cantidad de comunidades que tenían en común con el usuario. Luego se ordena (descendente) por esa suma.