【问题标题】:MongoDB regex multiple query with $and使用 $and 的 MongoDB 正则表达式多个查询
【发布时间】:2014-11-21 21:36:29
【问题描述】:

我在实现这一点时遇到了问题。

我有一段在 Rock Mongo 中测试过的代码,它运行良好。

array(
    'TEST' => 
    array( '$in' => 
        array( new MongoRegex('/^(?!TESTVALUE)/$ig'))
         )
     )

上面的代码返回给我所有没有值“TESTVALUE”作为键“TEST”的文档。

现在我想要实现什么?

首先,我不知道如何编写一段代码来获取键“TEST”没有值“TESTVALUE”和“SECONDVALUE”的所有文档。

这将是这样的:

array(
    'TEST' => 
    array( '$in' => 
        array( new MongoRegex('/^(?!TESTVALUE)/$ig'),new MongoRegex('/^(?!SECONDVALUE)/$ig') )
        )
     )

而且我还需要上面用 PHP 编写的代码。

欢迎任何形式的帮助或建议,我们将不胜感激。

提前致谢

【问题讨论】:

    标签: php mongodb mongodb-query


    【解决方案1】:

    我不认为你可以这样使用 $in,但这应该可以:

    'TEST' => array('$and' => array(
        array('$regex' => new MongoRegex('/^(?!TESTVALUE)/$ig'),
        array('$regex' => new MongoRegex('/^(?!TESTVALUE)/$ig')))
    

    类似的东西(未经测试)

    【讨论】:

    • 那行不通,但我看到你写的是未经测试的。如果我尝试对此做点什么,我会告诉你的。
    • 是的,基本上我的意思是您必须与每个正则表达式进行比较 - 或者弄清楚如何将它们写成一个(可能使用 | 运算符)。 $in 需要明确的值
    • 今天我要放弃了。我真的没有想法了。
    【解决方案2】:

    您的查询和您的描述似乎相互矛盾。如果您想查询所有没有某些字符串作为字段值的文档,为什么要使用正则表达式?您不希望该值成为字段值的子字符串吗?如果您只想查询“查找TEST 字段的值不是“X”或“Y”的文档,请使用$nin(“不在”):

    db.collection.find({ "TEST" : { "$nin" : ["X", "Y"] } })
    

    如果该字段应匹配多个正则表达式,则将它们组合成一个正则表达式或将条件与$and 组合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 2020-05-07
      • 2014-08-11
      • 2015-09-18
      相关资源
      最近更新 更多