我正在对输入句子进行模糊匹配,我现在在AF中有一个步骤:
{ "$group" : { "_id" : "$_id" , "score" : { "$sum" : 1}}}
但是我希望能够将较短的比赛得分更高,并希望做类似的事情:
{ "$group" : { "_id" : "$_id" , "score" : { "$sum" : "1 / $length"}}}
这样的事情可能吗?
答案 0 :(得分:1)
是的,应该可以(假设$ length是文档中的字段名称),但命令应如下所示:
{ "$group" : { "_id" : "$_id" , "score" : { $sum : {$divide: [1, "$length"]}}}}
您可以在page上找到有关可能的数学表达式的更多详细信息。
答案 1 :(得分:0)
我想你想要这样的东西。默认的“_id”值是唯一的,因此您可能希望对其他参数进行分组。所以我在这里使用了另一个参数idd,而不是_id。
> db.tmp1.aggregate({'$group':{'_id':'$idd', 'count':{'$sum':1} }},{ $project : { _id: 1, suminv :{$divide:[1, '$count'] } } } );
{ "_id" : 2, "suminv" : 0.3333333333333333 }{ "_id" : 1, "suminv" : 0.5 }
> db.tmp1.find();
{ "_id" : ObjectId("572a5a74024dc1f2fe4b432b"), "idd" : 1, "score" : 2 }
{ "_id" : ObjectId("572a5a79024dc1f2fe4b432c"), "idd" : 1, "score" : 1 }
{ "_id" : ObjectId("572a5a82024dc1f2fe4b432d"), "idd" : 2, "score" : 1 }
{ "_id" : ObjectId("572a5a86024dc1f2fe4b432e"), "idd" : 2, "score" : 2 }
{ "_id" : ObjectId("572a5a8e024dc1f2fe4b432f"), "idd" : 2, "score" : 3 }