我正在寻找的是某种程度上相当于在SQL中做:
WHERE 1 = 0
Run Code Online (Sandbox Code Playgroud)
我正在寻找这样的东西,因为我正在构建一个类型安全的DSL来对我的域执行查询,支持连接和析取.有时,添加一个永远不匹配任何内容的查询可能更容易,而不是在代码中处理它.
例如,在我的用例中:
StampleFilters().underCategoryIds(sharedCategoryIds.toList)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它不能按预期工作,因为它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
集合中没有这样的字段.
PS如果有人会如此聪明地将他们的_id命名为-1,那么你就可以做到{_id : NaN}
.如果有,_id = NaN
那么你很可能需要重新开发你的应用程序.
归档时间: |
|
查看次数: |
235 次 |
最近记录: |