Mongodb 这个查询安全吗?

Mongodb 这个查询安全吗?,mongodb,Mongodb,我在集合k上有一个索引{s:1},如: k类数据: {s:“aaa”}, {s:“bbb”}, {s:} 使用{s:{$gt:“}}查找s长度大于0的每个项目是否安全 使用$ne可能更合适 即“不等于”基于以下事实,我认为它是“安全的”: 任何非空字符串都大于按字典顺序排列的空字符串 索引工作正常,因此性能应该正常 要测试索引是否正常工作,可以执行 db.collectionName.find({s: {$gt: ""}}).explain() 当看到“游标”:“btreecursor

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

k类数据:


{s:“aaa”},
{s:“bbb”},
{s:}


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

使用$ne可能更合适

即“不等于”

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

  • 任何非空字符串都大于按字典顺序排列的空字符串
  • 索引工作正常,因此性能应该正常
要测试索引是否正常工作,可以执行

db.collectionName.find({s: {$gt: ""}}).explain()
当看到
“游标”:“btreecursors_1”
时,表示索引工作

但您是否考虑在空时修改应用程序逻辑并删除<代码> s <代码>字段?

  • db.test.find({s:{$exists:false}})。提示({s:1})
    可用于此查询。它比
    $gt
    更自然
  • 您可以从性能改进中获益。尤其是当您的大多数数据都是空的
    s

但是
{s:{$exists:true}}
不会使用索引,我不确定mongodb在创建基于字符串的索引时是否使用了字典顺序。关于
$exists
的更新需要额外提示。有人能告诉我mongodb如何构建基于字符串的索引,字符串的顺序是什么吗?是的,但您可以将其与空检查结合起来,如
{s:{$ne:,$ne:null}