2017-04-05 65 views
1

所以我有一個應用程序,涉及給估計的等待時間。我目前已將我的模式設置爲具有waitTime的估計值,而不是集合中項目的數量。這工作發現。如何更新mongodb中所有對象的每個特定值?

我遇到的問題是,每當有人從數據庫中刪除時,我需要能夠將數據庫中每個人的估計等待時間減少15。

例如,目前有四個人在數據庫中。每個人分別有15,30,45和60的等待時間。然後說數據庫中的第二個人被刪除(即他們取消他們的約會)。然後,在第二個人之後的兩個人需要將他們的估計等待時間更新爲30和45分鐘。

{ 
    "_id": "qntsyc9RZqkbHnSGM", 
    "Name": "John", 
    "PhoneNumber": "5555555555", 
    "createdAt": "2017-04-05T05:05:46.024Z", 
    "currentStatus": "Waiting", 
    "waitTime": 30 //this is the value I want to reduce for every object in the database 
} 

我該如何去做這件事?

P.S.這基本上是創建一個索引,但我有問題試圖爲我的數據庫創建索引。我試過使用createIndex()和ensureIndex(),但沒有成功(也許我只是做錯了)。如果有一種方法可以爲我的db創建一個索引,那麼我也可以使用它。

回答

1

MongoDB 更新操作是單數。因此您需要通過{multi:true}來更新多個記錄。試試這個,

db.dbname.update({},{ $inc: {'waitTime':-15} }, {multi:true});//Mongo query 
1

如果你想減少所有這些值15,你會想使用$ inc操作符。它除了負值,所以你可以用它來增加或減少。

的更新將是這個樣子,只是改變了集合的名稱:

db.epace.update({}, {$inc:{waitTime: -15}}, {multi:true}) 
1

如果你需要刪除的記錄後降低waitime你需要使用$ INC運營商負值

更新
db.queue.update({}, {$inc: {waitTime: -15 }},{ multi:true }) 

但是,這將更新所有的文件,甚至第一個,所以你必須更新只有那些文件後刪除的不是前一個。

你可以很容易地使用

db.queue.update( { created_at: { $gt: timestamp }}, {$inc: {waitingTime: -15 }},{multi:true})

+0

所以,我想,但我在控制檯中此錯誤的文檔:允許-deny.js:494個未捕獲 errorClass {錯誤:403,原因是:「 「,details:undefined,message:」Not allowed。Untrusted code may only update documents by ID。[403]「,errorType:」Meteor.Error「...} –

+0

您需要做這個服務器端。 –

相關問題