【问题标题】:Perform case-insensitive lookup on an Array in MongoDB?对 MongoDB 中的数组执行不区分大小写的查找?
【发布时间】:2011-02-22 05:49:50
【问题描述】:

所以,我决定开始使用 MongoDB 并爱上它。它看起来非常快速和灵活,这很棒。但是,我仍在经历最初的学习曲线,因此,我会花费数小时来挖掘有关最基本知识的信息。

我搜索了整个 MongoDB 在线文档,并花了几个小时在谷歌上搜索页面,但没有提及这一点。我知道 Mongo 仍然很新(v1.x),所以它解释了为什么还没有太多信息。我什至尝试在没有太多运气的情况下寻找有关 Mongo 的书籍。所以是的,我试过 RTM 没有运气,所以,现在我求助于你。

我有一个嵌套在每个文档中的各种主题标签数组(即:#apples、#oranges、#Apples、#APPLES),我想执行一个不区分大小写的 find() 来访问所有包含苹果的文档任何情况。似乎 find 确实支持一些带有 /i 的正则表达式,但我似乎也无法让它工作。

无论如何,我希望这对某人来说是一个快速的答案。

这是我现有的 PHP 调用,区分大小写:

$cursor = $collection->find(array( "hashtags" => array("#".$keyword)))->sort(array('$natural' => -1))->limit(10);

帮助?

【问题讨论】:

    标签: php mongodb case-insensitive nosql


    【解决方案1】:

    我怀疑您的查询没有返回您真正想要的...

    如果你这样做了

    db.col.find( { some_array_field: ["item1", "item2"] } );
    

    然后它将匹配在 some_array_field 中完全具有这两个项目的文档。因此,如果有一个带有 [item1, item2] 标签的文档,它将匹配,但带有 [item1, item2, item3] 标签的文档将不匹配。

    您可以使用本文所述的 $all 参数:

    How do you do an AND query on an array in mongodb?

    例如

    db.col.find( { some_array_field: { $all : ["item1", "item2"] } } );
    

    或:

    db.col.find( { some_array_field: "item1", some_array_field: "item2" } );
    

    一开始我在 MongoDB 中对完全文档匹配和部分匹配的这种区别真的很困惑。

    【讨论】:

      【解决方案2】:

      这里是在mongodbphp 中进行不区分大小写 搜索的示例

      $search_string='baR';
      
      $searchQuery = array(
                  '$or' => array(
                      array(
                          'field1' => new MongoRegex("/^$search_string/i"),
                          ),
                      array(
                          'field2' => new MongoRegex("/^$search_string/i"),
                          ),
                      )
                  );
      
      $cursor = $customers->find($searchQuery);
      

      希望对您有所帮助。

      【讨论】:

      • 我想你的意思是:new MongoRegex("/^search_string$/i"),不是吗?
      • MongoRegex 已被 MongoDB\BSON\Regex 弃用,因此现在您可以使用 new MongoDB\BSON\Regex("^$search_string\$", "/i") 对变量 $search_string 进行不区分大小写的查找。
      猜你喜欢
      • 2010-10-06
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2015-09-05
      • 2014-05-20
      相关资源
      最近更新 更多