如何查找和更新mongodb查询中字段的最低值



我经常运行mongo-db查询来查找字段值最低的文档,然后运行另一个查询来更新它们。

例如:

Ticket.find({
userEvent: eventData._id,
})
.sort( { purchasersMinimumPrice: 1 } )
.then(data => {
let SecureRefundRequests = data.slice(0, 6).map(e => {return (Ticket.findByIdAndUpdate({_id: e._id}, {
refundAttemptExpires :(Date.now() + (5*60*1000))})
)})
Promise.all(SecureRefundRequests)
})

为了减少对数据库的调用次数,我希望在一个查询中完成所有这些操作。

我一直在玩db.collection.update,但不知道如何使用返回的排序文档的索引。

这可能吗?

在一个更新命令中无法真正做到这一点。

db.collection.update分别评估每个文档,而不保留文档之间的任何状态。这意味着您可以在文档中包含的数组中找到最小值,但不能在文档之间比较值。

您可以通过在上创建索引来提高现有查询的性能{userEvent:1, purchasersMinimumPrice:1, _id:1},还对查询应用6的限制,并仅针对_id进行投影。这些加在一起将允许mongod找到与该id匹配的具有最低值的6个文档,并返回执行更新所需的_id,而无需内存排序,也无需实际查看文档,即查询完全由索引覆盖。

最新更新