MongoDB集合作为FIFO堆栈

Val*_*tin 2 stack mongodb mongodb-.net-driver

我需要用MongoDB集合实现FIFO逻辑:

  1. 弹出MongoDB集合中的第一个文档.
  2. 将文档推送到MongoDB集合并将其作为最后一个文档.

集合中的文档除了自动生成的_id(ObjectId)之外没有任何索引.

我想知道,是否有可能从集合中找到并删除第一个文档并保证推送和弹出操作将以原子方式执行FIFO堆栈?

我知道可以使用原子推送和弹出操作来处理文档中的数组,但主要问题是如果我将所有数据存储在1个文档的数组中,它的大小将超过16MB(MongoDB允许的最大大小)文献)

在此先感谢,Valentin

Rem*_*iet 5

如果您从一台计算机访问堆栈,则可以使用findAndRemove执行此操作:

db.col.findAndModify({query:{}, sort:{i: -1}, remove:true})
Run Code Online (Sandbox Code Playgroud)

这将返回已删除的值,并根据您的请求原子地删除文档本身.其中"i"是时间排序字段(如果它是ObjectId,则_id可用).如果您正在使用来自多个实例的FIFO堆栈/集合,则必须确保"i"值在所有实例中以原子方式增加,否则您将不得不使用FIFO-ish而不是严格如此.