2016-05-04 98 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 }