稀疏的标志有点奇怪。要了解何时使用它,您必须首先了解为什么“稀疏”存在。
当您在一个字段上创建简单索引时,每个文档(甚至没有该字段的文档)都会有一个条目。
例如,如果您有一个索引{rarely_set_field : 1}
,您将拥有一个主要由以下内容组成的索引null
因为大多数情况下该字段不存在。这样既浪费空间,而且搜索效率低。
The {sparse:true}
选项将摆脱null
值,因此您会得到一个仅包含条目的索引{rarely_set_field}
被定义为。
回到你的案例。
您正在询问有关使用布尔值+稀疏值的问题。但稀疏并不真正影响“布尔”,稀疏影响“设置与未设置”。
在你的情况下,你正在尝试获取unfinished
。发挥杠杆作用sparse
关键不是布尔值,而是事实unfinished
条目具有该键,而“完成”条目根本没有键。
{ _id: 1, data: {...}, unfinished: true }
{ _id: 2, data: {...} } // this entry is finished
听起来你正在使用队列
您绝对可以利用上面的信息来实现稀疏索引。然而,实际上听起来您正在使用队列。 MongoDB 可以作为队列使用,如下two http://blog.serverdensity.com/2011/09/28/replacing-rabbitmq-with-mongodb/ examples http://captaincodeman.com/2011/05/28/simple-service-bus-message-queue-mongodb/.
但是,如果您查看队列,就会发现他们并没有按照您的方式进行操作。我个人使用 MongoDB 作为某些生产系统的队列,它运行得很好,但测试您的预期负载,因为专用队列会执行得更好。