gpt4 book ai didi

mongodb - 创建永远不匹配的 mongo 表达式的最佳方法

转载 作者:IT老高 更新时间:2023-10-28 13:35:29 26 4
gpt4 key购买 nike

我正在寻找的是在某种程度上相当于在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com