2014-11-21 226 views
0

我有问题要实现这一点。

我有这段代码,我已经在Rock Mongo中测试过,它工作正常。

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

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

现在我想实现什么?

首先,我不知道如何编写一段代码来获取所有文档,其中没有值“TESTVALUE”&“SECONDVALUE”,关键字为“TEST”。

这将是这样的:

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

而且我也需要上面这段写在PHP代码。

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

在此先感谢

回答

0

我不认为你可以使用$在这样的,但这应该工作:

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

大意的东西(未经测试)

+0

这并不奏效,但我看到你写入了未经测试的结果 如果我试图用这个做一些事情,我会告诉你。 – PottaG 2014-11-21 22:22:43

+0

是的,基本上我得到的是你必须与每个正则表达式进行比较 - 或者想出如何将它们写入一个(也许用|运算符)。$ in期望显式值 – DAB 2014-11-21 22:24:21

+0

我今天放弃了。我真的没有想法了。 – PottaG 2014-11-21 22:37:03

0

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

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

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