在阵列中的MongoDB的搜索和排序匹配的数(In MongoDB search in an arr

2019-06-28 07:34发布

现在的问题是下一个:

即可通过列表的标签,文档通过匹配的总数排序

但是他们说,这是可能的使用聚合框架,这可能吗?

Answer 1:

是的,有可能使用聚合框架。

假设

  • 这里使用的数据集是使用相同的获取文件在列表的标签,通过比赛的总数量排序
  • tags属性是一组(无重复的元素)

询问

这种方法迫使你放松的结果,并与unwinded结果重新评估匹配谓语,所以它真的效率低下。

db.test_col.aggregate(
    {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
    {$unwind: "$tags"}, 
    {$match: {tags: {$in: ["shirt","cotton","black"]}}}, 
    {$group: {
        _id:{"_id":1}, 
        matches:{$sum:1}
    }}, 
    {$sort:{matches:-1}}
);

预期成绩

{
    "result" : [
        {
            "_id" : {
                "_id" : ObjectId("5051f1786a64bd2c54918b26")
            },
            "matches" : 3
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1726a64bd2c54918b24")
            },
            "matches" : 2
        },
        {
            "_id" : {
                "_id" : ObjectId("5051f1756a64bd2c54918b25")
            },
            "matches" : 1
        }
    ],
    "ok" : 1
}


文章来源: In MongoDB search in an array and sort by number of matches