【问题标题】:How to update every specific value for all objects in mongodb?如何更新 mongodb 中所有对象的每个特定值?
【发布时间】:2017-04-05 13:55:06
【问题描述】:

所以我有一个应用程序,其中涉及给出估计的等待时间。我目前将我的架构设置为根据集合中的项目数估算出一个 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
}

我该怎么做呢?

附:这基本上是在创建一个索引,但我在尝试为我的数据库创建索引时遇到了问题。我尝试使用 createIndex() 和 ensureIndex(),但没有成功(也许我只是做错了)。如果有办法为我的数据库创建索引,那么我也可以使用它。

【问题讨论】:

    标签: javascript html mongodb meteor


    【解决方案1】:

    如果您想将所有这些值都减少 15,您将需要使用 $inc 运算符。它不包括负值,因此您可以使用它来增加或减少。

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

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

    【讨论】:

      【解决方案2】:

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

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

      但这将更新所有文档,甚至是第一个文档,因此您只需更新已删除文档之后的那些文档,而不是前一个文档。

      您可以使用

      轻松获取这些文档

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

      【讨论】:

      • 所以我尝试了这个,但我在控制台中收到了这个错误:allow-deny.js:494 Uncaught errorClass {error: 403, reason: "不允许。不受信任的代码只能按 ID 更新文档。 ", details: undefined, message: "Not allowed. Untrusted code may only update documents by ID. [403]", errorType: "Meteor.Error"...}
      • 你需要在服务器端做这个。
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-09-27
        • 1970-01-01
        • 2020-12-18
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-08-23
        • 2021-04-23
        • 2021-07-17
        相关资源
        最近更新 更多