2016-05-04 61 views
0

我做了模糊匹配于输入句子,我现在有这样的AF步:

{ "$group" : { "_id" : "$_id" , "score" : { "$sum" : 1}}} 

,但我希望能够得分较短的比赛更高,想干什么像这样:

{ "$group" : { "_id" : "$_id" , "score" : { "$sum" : "1/$length"}}} 

是这样的可能吗?

+0

请显示样本文件与预期的输出,因为你写的问题,因为它的写法很难理解。 – styvane

回答

1

是的,它应该是可能的(假设$长度字段名在您的文档),但该命令应该是这样的:

{ "$group" : { "_id" : "$_id" , "score" : { $sum : {$divide: [1, "$length"]}}}} 

你可以找到关于此page有关可能的数学表达式的更多细节。

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 }