2016-04-26 92 views
1

當我在Robomongo上運行時,第一個查詢將起作用。但是,在將其轉換爲PHP時遇到麻煩。將MongoDB查詢轉換爲PHP

我已經包含了最新版本,請讓我知道如果我錯過任何東西。

此作品(MongoDB的查詢)

db.statusNew.find(
    {_id: ObjectId("123")}, 
    { 
     statuses: { 
     $elemMatch: { 
      id : 321 
     }} 
    } 
).limit(1) 

這不起作用(翻譯成PHP)

$queryOri = array(
    (_id: new MongoId($id)), 
    (
     statuses: (
     $elemMatch: (
      id : $tweetID['id'] 
    )) 
) 
); 

$query = $collection.find($queryOri).limit(1); 

更新!

$collection -> find(
    array('_id' => new MongoId($id)), 
    array(
     'statuses' => array(
      $elemMatch: (
       id: $tweetID['id'] 
      ) 
     ) 
    ) 
); 

陣列看起來像這樣:

Array 
(
    [_id] => MongoId Object 
    (
     [$id] => 123 
    ) 

    [statuses] => Array 
    (
     [0] => Array 
      (
      [id] => 321 
      [text] => Tweet no 1 
      ) 
     [1] => Array 
      (
      [id] => 322 
      [text] => Tweet no 2 
      ) 
     [2] => Array 
      (
      [id] => 323 
      [text] => Tweet no 3 
      ) 
    ) 
) 

回答

0
$collection->find(
    array('_id' => new MongoId($id)), 
    array(
     'statuses' => array(
      '$elemMatch' => array(
       'id'=>$tweetID['id'] 
      ) 
     ) 
    ) 
); 

你必須使用冒號(:)而不是assingment(=>)。在MongoDB中,每個大括號都只會在php中作爲數組考慮。希望你得到了這個答案。