2017-04-05 63 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

您需要做这个服务器端。 –

相关问题