这个查询安全吗?

时间:2012-12-18 02:45:29

标签: mongodb

我在集合k上有一个索引{s:1},如:

k中的数据喜欢:

{ s:"aaa"} , {s:"bbb"} , {s:""}

使用{s:{$gt:""}}找出长度大于0的每个项目是否安全?

2 个答案:

答案 0 :(得分:2)

我认为这是基于以下事实的“安全”:

  • 任何非空字符串都大于字典顺序中的空字符串。
  • 索引正常工作,因此性能应该没问题。

要测试索引是否正常工作,您可以执行

db.collectionName.find({s: {$gt: ""}}).explain()

当看到"cursor" : "BtreeCursor s_1"时,这意味着索引有效。

但是,您是否考虑修改应用程序逻辑并删除s字段为空?

  • db.test.find({s: {$exists: false}}).hint({s: 1})可以在此查询中使用。它比$gt更具自然性。
  • 您可以在效果方面受益MongoDB sparse index。特别是当您的大多数数据都为空s时。

答案 1 :(得分:1)

使用$ ne可能更合适

即“不等于”