2012-11-27 6 views
1

ceci est mon syntaq pour interroger

http://pastebin.com/q05EBSUJ

je suis arrivé erreur pour résultat

[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/ 

je tente de googler, beaucoup de dire si son mal en version mongodb .

Mon syntaq est-il mauvais? ou ma version de mongodb mal, mon mongodb verison = 2.2.1?

grâce

Répondre

0

Vous avez couche supplémentaire de profondeur pour $ ou un tableau.

Essayez:

$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)); 
0

@tpae son fonctionne pas.

J'ai ma propre solution.

$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); 

et son travail.

+1

Vous pouvez déplacer « noeud » en dehors du $ ou puisqu'il est le même entre les deux clauses, un point mineur, mais encore une valeur noteing – Sammaye

0

utilisez le code suivant

$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); 

au lieu de

$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); 
0

Prenons l'exemple suivant qui utilise l'opérateur $or pour sélectionner des champs de documents intégrés:

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

Essayez:

$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

+0

je sais juste que la requête MongoDB en php peut utiliser tuple, comme le vôtre. ['user_id' => $ this-> session-> userdata ('user_id')]. Laisse-moi essayer –