我有一個看起來像這樣的集合:
{
"_id" : ObjectId("..."),
"cityName" : "New York",
"factories" : [
{
"factoryName": "factory1",
"productAmount": 400,
"numberOfWorkers": 5,
"workersProductionPerSecond": 0.1
},
{
"factoryName": "factory2",
"productAmount": 200,
"numberOfWorkers": 3,
"workersProductionPerSecond": 0.2
}
]
},
{
"_id" : ObjectId("..."),
"cityName" : "New Jersey",
"factories" : [
{
"factoryName": "New factory",
"productAmount": 100,
"numberOfWorkers": 5,
"workersProductionPerSecond": 0.25
},
{
"factoryName": "New Factory 2",
"productAmount": 200,
"numberOfWorkers": 5,
"workersProductionPerSecond": 0.4
}
]
}
假設我想要一個每秒更新所有工廠的服務productAmount
(想象有數百個城市,每個城市都有數百個工廠)。需要的更新productAmount
是這樣的偽代碼
productAmount = numberOfWorkers (of this factory ) * workersProductionPerSecond (of this factory) ;
誰能推薦一個高效的mongodb查詢/一個好的javascript代碼來更新所有城市所有工廠的產品數量?或者也許為了做一個簡單的查詢,工廠應該在他們自己的集合中,并帶有城市的外鍵?謝謝 :)
uj5u.com熱心網友回復:
我建議使用一個簡單的$map
:
db.collection.update({},
[
{
$set: {
factories: {
$map: {
input: "$factories",
as: "item",
in: {
factoryName: "$$item.factoryName",
productAmount: {$add: [{
$multiply: [
"$$item.numberOfWorkers",
"$$item.workersProductionPerSecond"
]
}, "$$item.productAmount"]},
numberOfWorkers: "$$item.numberOfWorkers",
workersProductionPerSecond: "$$item.workersProductionPerSecond"
}
}
}
}
}
],
{
multi: true
})
游樂場示例
然而,如果每個工廠都是一個帶有城市外鍵的檔案,那么等價查詢會更加簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/482021.html
標籤:mongodb
上一篇:MongoDB欄位必須是陣列
下一篇:返回列表