javascript - 对记录进行排序,然后在 MongoDB 中使用 updateMany 进行限制

标签 javascript node.js mongodb nosql

我正在尝试更新 MongoDB 数据库中的所有记录。我想根据日期(updatedAt)按升序对记录进行排序。然后根据其当前状态(currentStatus)更新有限数量的记录。

这些字段是这样的: enter image description here

我尝试过,但没有成功:

var count = 20;
var sortUpdatedAt = this.collection.find({}).sort({"updatedAt":1});
try {
    this.collection.updateMany(sortUpdatedAt,
     {"currentStatus": {$in:["ACTIVE","IDLE"]} },
     { $set: { "currentStatus" : "SHUTDOWN" } }
    ).limit(count);
} catch (e) {
    logger.error(e);
}

创建了变量 sortUpdatedAt 因为我读到 updateMany 不支持 .sort()

最佳答案

不幸的是,findupdateMany 不是适合这项工作的工具。相反,您应该查看 aggregation pipeline 。通过$sort的组合, $filter ,和$limit聚合运算符,您应该能够执行问题中描述的确切操作。

PS:如果这打算成为您集合的常见操作,请不要忘记向您正在排序的字段添加索引(如果您还没有),以提高性能。

关于javascript - 对记录进行排序,然后在 MongoDB 中使用 updateMany 进行限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55302789/

相关文章:

php - 无需刷新页面即可获取复选框值

javascript - $$ ('foo' ) 在 JavaScript 源代码中是什么意思?

node.js - 从 stream() 移动到 cursor() 时,lean() 不再有效

javascript - 在 ReactJS 中显示计数器增加的元素

javascript - 无法使 moment-timezone.js 工作

javascript - 更改推特流谓词(Node.js、socket.io)

javascript - 插入排序最后一项未定义

java - 我如何更快地获得 MongoDB 中的等效函数? WHERE 子句?

mongodb - 当使用 debezium 从 mongoDB 读取时,KafkaConnect 生成具有空值的 CDC 事件

ruby-on-rails - 将 Mongodb 嵌入文档移动到自己的集合中