如何更新mongodb中所有对象的每个特定值?

时间:2017-04-05 05:20:35

标签: javascript html mongodb meteor

所以我有一个涉及估计等待时间的应用程序。我目前已将我的架构设置为具有waitTime值,该值估计了集合中项目数的计数。这项工作找到了。

我遇到的问题是,只要有人从数据库中删除,我就需要为数据库中的每个人减少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(),但没有成功(也许我只是做错了)。如果有办法为我的数据库创建索引,那么我也可以使用它。

3 个答案:

答案 0 :(得分:1)

MongoDB 更新操作是单数。因此,您需要通过{multi:true}来更新多个记录。试试这个,

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

答案 1 :(得分:1)

如果要将所有值的值减少15,则需要使用$ inc运算符。它排除负值,因此您可以使用它来递增或递减。

更新看起来像这样,只需更改集合的名称:

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

答案 2 :(得分:1)

如果您需要在删除的记录后减少等待时间,则需要使用带负值的$ inc运算符进行更新

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

但是这将更新所有文档,即使是第一个文档,因此您必须在删除的文档之后仅更新这些文档而不是之前的文档。

您可以使用

轻松获取这些文档

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