这是我的数据如何存储在单个运动员的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:我如何查看每个文档的匹配百分比,以便运动员知道他必须如何“认真”地解释疼痛评分?
谢谢。
答案 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);
}
}