在php中查询$或mongodb

时间:2012-11-27 06:19:27

标签: php mongodb

这是我要查询的syntaq

http://pastebin.com/q05EBSUJ

我收到错误的结果

[Tue Nov 27 13:05:16 2012] [error] [client 127.0.0.1] PHP Fatal error:  Uncaught exception 'MongoCursorException' with message 'invalid operator: $or' in /var/www/

我尝试使用谷歌搜索,很多说如果mongodb版本的错误。

我的syntaq错了吗?或者我的mongodb版本错了,我的mongodb verison = 2.2.1?

感谢

4 个答案:

答案 0 :(得分:0)

$或数组有额外的深度层。

尝试:

$result = 
    $mo->find(array(
          "node" => "stream",
          "$or"  => array("user_id" => $this->session->userdata('user_id'),
                               "to" => $this->session->userdata('user_id'))
       ->limit(5)
       ->sort(array("time" => -1));

答案 1 :(得分:0)

@tpae它不起作用。

我有自己的解决方案。

    $result = $mo->find(
      array('$or' => array(
        array(
          'node' => 'stream',
          'user_id' => $this->session->userdata('user_id')
        ),
        array(
          'node' => 'stream',
          'to' => $this->session->userdata('user_id')
        )
      )
    )
  )->sort(array('time' => -1))->limit(5);  

及其工作。

答案 2 :(得分:0)

使用以下代码

$result = $mo->find(
      array(
        'node' => 'stream',
         array('or' => array(
          'user_id' => $this->session->userdata('user_id'),
          'to' => $this->session->userdata('user_id')
         )
      )
   )
 )->sort(array('time' => -1))->limit(5);

而不是

$result = $mo->find(
      array(
        'node' => 'stream',
         array('$or' => array(
          'user_id' => $this->session->userdata('user_id'),
          'to' => $this->session->userdata('user_id')
         )
      )
   )
 )->sort(array('time' => -1))->limit(5);

答案 3 :(得分:0)

考虑以下使用$or运算符从嵌入文档中选择字段的示例:

$collection->find([
    // $or (array)
    '$or' => [
        ['key 1' => 'value 1'], // (array)
        ['key 2' => 'value 2']  // (array)
    ]
]);

尝试:

$result = $mo->find([
    // $or (array)
    '$or'   => [
        ['user_id'  => $this->session->userdata('user_id')], // (array)
        ['to'       => $this->session->userdata('user_id')]  // (array)
    ],
    'node'  => 'stream',
])->sort(['time' => -1])->limit(5);

References