PyMongo:如何查询序列并找到最接近的匹配项

时间:2018-10-30 17:10:56

标签: python-3.x mongodb pymongo-3.x

这是我的数据如何存储在单个运动员的MongoDB中的简化示例:

{   "_id" : ObjectId('5bd6eab25f74b70e5abb3326'),
    "Result" : 12,
    "Race" : [0.170, 4.234, 9.170]
    "Painscore" : 68,
}

现在,当该运动员参加了比赛时,我想搜索与当前比赛最相似的比赛,因此,我想比较两个得分。

IOT获得了我尝试过的最佳“匹配”:

query = [0.165, 4.031, 9.234]

closestBelow = db[athlete].find({'Race' : {"$lte": query}}, {"_id": 1, "Race": 1}).sort("Race", -1).limit(2)
for i in closestBelow:
    print(i)

closestAbove = db[athlete].find({'Race' : {"$gte": query}}, {"_id": 1, "Race": 1}).sort("Race", 1).limit(2)
for i in closestAbove:
    print(i)

这似乎不起作用。

  

问题1:我如何给上述查询IOT找出在Mongo中匹配最佳/平局的种族?..考虑到种族几乎永远不会完全相同。      

问题2:我如何查看每个文档的匹配百分比,以便运动员知道他必须如何“认真”地解释疼痛评分?

谢谢。

1 个答案:

答案 0 :(得分:0)

借助此网站,我找到了一个解决方案:http://dataaspirant.com/2015/04/11/five-most-popular-similarity-measures-implementation-in-python/

第1步:找到您的查询;

第2步:根据查询进行第一选择,并将结果附加到列表中(例如,平均值);

第3步:使用for循环将列表中的每个项目与您的查询进行比较。为此使用欧氏距离;

第4步:处理完匹配项后,将最佳匹配项定义为一个变量。

node insert(int data)
{
    node *ptr = new node;
    ptr->data = data;
    ptr->left = nullptr;
    ptr->right = nullptr;

    if(!root)
    {
        root = ptr;
    }
    else
    {
        node *pos = root;

        while(true)
        {
            if(pos->data > data)
            {
                if(!pos->left){
                    pos->left = ptr;
                    break;
                }

                pos = pos->left;
            }
            else if(pos->data < data)
            {
                if(!pos->right){
                    pos->right = ptr;
                    break;
                }

                pos = pos->right;                
            }
            else{
                break;
            }
        }
    }
    return *root;
}

void preorder(node *next)
{
    if(next)
    {
        cout << next->data << std::endl;
        preorder(next->left);
        preorder(next->right);
    }
}