2013-11-28 53 views
0

我都有下列文件中的MongoDB(每小時的數據1周2個節點nodeA和基站)MongoDB的+加場使用其他領域來計算+獲得MAX +

> db.collection_name.find().pretty() 
{ 
     "_id" : ObjectId("52979bc7ebf1a5ecb120ae65"), 
     "Time" : "18/11/2013 0:00", 
     "Node Name" : "NodeA", 
     "Integrity" : "100%", 
     "X_1" : 103674, 
     "X_2" : 45, 
     "X_3" : 13071, 
     "X_4" : 103626, 
     "X_5" : 46, 
     "X_6" : 14639 
} 
{ 
     "_id" : ObjectId("52979bc7ebf1a5ecb120ae66"), 
     "Time" : "18/11/2013 0:00", 
     "Node Name" : "NodeB", 
     "Integrity" : "100%", 
     "X_1" : 103674, 
     "X_2" : 45, 
     "X_3" : 13071, 
     "X_4" : 103626, 
     "X_5" : 46, 
     "X_6" : 14639 
} 

... 

{ 
     "_id" : ObjectId("52979bc7ebf1a5ecb120ae67"), 
     "Time" : "24/11/2013 23:00", 
     "Node Name" : "NodeA", 
     "Integrity" : "100%", 
     "X_1" : 103674, 
     "X_2" : 45, 
     "X_3" : 13071, 
     "X_4" : 103626, 
     "X_5" : 46, 
     "X_6" : 14639 
} 
{ 
     "_id" : ObjectId("52979bc7ebf1a5ecb120ae68"), 
     "Time" : "24/11/2013 23:00", 
     "Node Name" : "NodeB", 
     "Integrity" : "100%", 
     "X_1" : 103674, 
     "X_2" : 45, 
     "X_3" : 13071, 
     "X_4" : 103626, 
     "X_5" : 46, 
     "X_6" : 14639 
} 

現在我想要做的就是創建與一些新的領域是這樣的:

db.students.update({},{$set :{"new_field_name":<values_of_new_dieldname>}},{upsert:false,multi:true}) 
<values_of_new_dieldname>我想做

(X_1 + X_3)* 8/3600,讓我們稱之爲它CALCA,這將給像:(我不關心X1-> x6在此階段)

{ 
     "_id" : ObjectId("52979bc7ebf1a5ecb120ae91"), 
     "Time" : "24/11/2013 23:00", 
     "Node Name" : "NodeA", 
     "new_field_name": calcA 
} 
{ 
     "_id" : ObjectId("52979bc7ebf1a5ecb120ae90"), 
     "Time" : "24/11/2013 23:00", 
     "Node Name" : "NodeB", 
     "new_field_name": calcA 
} 

,然後我想在「節點名稱」相結合,得到「new_field_name」,這將給類似的總和:

_id { 

     "Time" : "24/11/2013 23:00", 
     "field_name": calcA + calcA (from NodeA and NodeB) 
} 

這樣的話,我將有其中之一從每小時「 18/11/2013 0:00「 - >」2013年11月24日23:00「。

,然後我想要得到的「字段名」

良好的最大值,這就是我想要做的,我希望這是明確的。我目前正在使用聚合方法來嘗試實現這一點。我會用這種方法是對的嗎?

謝謝

+0

這個問題很具體。較小的用例會更好。 – mikemaccana

+0

你真的不想把時間存儲在我猜想的是MM/DD/YYYY中。使用ISODate()。 – mcr

回答

1

你可以嘗試這樣的事情。

db.yourcollection.aggregate(
{ $group: 
    { 
    _id:"$Time", 
     x1sum: {$sum:"$X_1"}, 
    X3sum: {$sum:"$X_3"} 
    } 
}, 

{ $project: 
    { 
    _id:1, 
    calculation: {$divide:[[{$multiply:[{$add:["$x1sum","$x2sum"]},8}],3600] 
    } 

}); 

請重新檢查sintax,因爲我不能分辯現在測試它,它是所著的記事本,有很多花括號。如您所見,它首先按時間對數據進行分組,然後在投影中進行數學運算。

如果需要,您可以使用新管道對結果進行排序或在新組管道中使用$ max。