我经常运行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,但无法弄清楚如何使用返回的排序文档的索引。
这可能吗?
您真的不能在单个update命令中做到这一点。
db.collection.update
分别评估每个文档,而不在文档之间保持任何状态。这意味着您可以在文档中包含的数组中找到最小值,但是无法在文档之间比较值。
您可以通过在上创建索引,{userEvent:1, purchasersMinimumPrice:1, _id:1}
并在查询上应用限制6,并仅对_id进行投影,来提高现有查询的性能。这些都将使mongod可以找到与ID匹配的6个具有最低值的文档,并返回_id,而无需进行内存中的排序,也无需实际查看文档即可返回进行更新所需的_id,即,查询已完全覆盖索引。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句