【问题标题】:Mongoose update document in the moment of finding it猫鼬在找到它的那一刻更新文档
【发布时间】:2017-08-13 06:57:49
【问题描述】:

我正在开发任务查询。当请求任务时,我将返回最旧的任务,代码如下:

Task.find({})
        // Filter for those that are not started yet
        .where('startDate').equals(null)
        // Sort ascending to get the oldest
        .sort({ reqDate: 'asc' }).findOne(function (err, task) { ... }

在最后的括号内,我将 startDate 设置为当前时间。 这些请求是通过调用运行 express 并使用 Mongoose 与 MongoDB 通信的单个 NodeJS (Express) API 来完成的。

这适用于只有一个人请求任务,但我现在正在考虑一个巨大的规模。如果有多个人在同一时刻发出请求,所有人都在几毫秒的同一时间跨度内收到相同的任务怎么办?

有没有办法确保文件的startDate在被猫鼬找到的那一刻设置?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    在 Mongo 中有 db.collection.findAndModify()db.collection.findOneAndUpdate()

    但无论如何,您都可能会遇到竞争条件。您最好使用 Redis、RabbitMQ、ZeroMQ、ActiveMQ、NSQ 等来实现队列。

    见:

    更多工具在这里:

    总而言之,您可以使用db.collection.findAndModify()db.collection.findOneAndUpdate() 解决您当前的问题,但是使用适当的队列或发布/订阅工具会为您省去很多麻烦,尤其是当您开始处理时多个任务同时进行。

    【讨论】:

    • 谢谢,正是我需要的。一定会仔细研究您的建议。
    猜你喜欢
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2020-06-27
    • 2016-06-19
    • 2020-10-18
    相关资源
    最近更新 更多