我正在寻找的是在某种程度上相当于在 SQL 中做的事情:
WHERE 1 = 0
我正在寻找这样的东西,因为我正在构建一个类型安全的 DSL 来在我的域上执行查询,支持连接和析取。有时,添加一个从不匹配任何内容的查询可能会更容易,而不是在代码中处理它。
例如,在我的用例中:
StampleFilters().underCategoryIds(sharedCategoryIds.toList)
在这种情况下,它没有按预期工作,因为 sharedCategoryIds
为空,因此它导致查询为 $()
,它不会过滤任何内容。
对于一个空列表,我宁愿构建一个从不返回任何内容的查询。
有没有简单的方法来做这样的事情,而不影响性能?
我可能会添加一些查询,如 { somefield: unexistingvalue }
但我想知道是否有更好的选择。
编辑
我希望表达式是可组合的。我的意思是它应该在像 $or(exp1,exp2,exp3)
这样的查询中工作,其中 exp1
是例如永远不匹配的表达式。
如果您有任何建议,最好解释一下为什么一个比其他更好,以及它如何影响查询引擎的性能(或不)
最佳答案
我认为实现你想要的最好方法是添加 {_id : -1}
db.coll.find({a : 1})
将被转换为 db.coll.find({a : 1, _id : -1})
.这比所有 shx2 解决方案都简单(除了最后一个带有 noScan 的解决方案,这很好)。
而且_id
字段已经是主索引,所以它会很快意识到集合中没有这个_id
字段。
P.S.如果有人这么聪明地将他们的 _id 命名为 -1,那么您可以使用 {_id : NaN}
。
如果会有 _id = NaN
那么你很可能需要重新开发你的应用程序。
关于mongodb - 创建永远不匹配的 mongo 表达式的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23917459/