mongodb $ nin在php中不起作用

时间:2014-08-15 06:54:24

标签: php mongodb mongodb-query

当前代码:

$doc = array('ooxx' => array(1,2,3,4,5));

datamodel()->insert($doc);

$doc2 = array('ooxx' => array(6,7,8,9));
datamodel()->insert($doc2);

$macher = array('ooxx'=>array('$exists' => true), 'ooxx' => array('$nin'=>array(6)));
$res = datamodel()->findOne($macher);
print_r($res);

当我替换 $macher时,它确实有效,为什么?这是mongodb的错误吗?

$macher = array( 'ooxx' => array('$nin'=>array(6)), 'ooxx'=>array('$exists' => true));

1 个答案:

答案 0 :(得分:1)

它不起作用,因为键具有相同的名称而一个键覆盖另一个键。所以"键"需要独一无二。

如果您对同一个键有两个条件,则使用带有一组参数的$and运算符:

$matcher = array(
    '$and' => array( 
        array( 'ooxx' => array( '$nin' => array(6) ) ),
        array( 'ooxx' => array( '$exists' => true ) )
    )
)

或者对于JSON意识​​到:

{
    "$and": [
        { "ooxx": { "$nin": [6] } },
        { "ooxx": { "$exists": true } }
    ]
}

这是一个有效的结构,你写的不是。