2016-03-01 74 views
-1

我在MongoDB中使用PHP變量時遇到問題。PHP - MONGODB - 查詢中的變量

該查詢確定:

$cursor1 = $collection->distinct(array('filename'=> array(['name'=>'pippo']))); 

但此查詢不起作用:

$cursor1 = $collection->distinct(array('filename'=> $whereClause)); 

其中:

$whereClause = "array(['name'=>'pippo'])" 

爲什麼?

+1

要傳遞在字符串而不是陣列。 – PeeHaa

+0

在你的情況$ whereClause是我看到的字符串,你用雙引號將值包圍。刪除雙引號,並讓$ whereClause是一個php數組。 – tudor

+0

感謝您的回答。當我刪除雙引號我收到此錯誤:警告:MongoCollection :: distinct()期望參數1是字符串,數組給出在C:\ wamp \ www \ prove \ selectMongoDB.php 44行 – bomberdini

回答

0

docs開始,distinct命令將返回一個集合中給定鍵的不同值的列表。在這種情況下,您希望給它兩個參數,即使用的關鍵字以及要與變量一起傳入的查詢。

考慮下面的例子證明本

<?php 
$m = new MongoClient("localhost"); 
$collection = $m->selectDB("test")->selectCollection("Data"); 

$collection->insert(array("filename" => "bar.txt", "name" => "bar")); 
$collection->insert(array("filename" => "foo", "name" => "pippo")); 
$collection->insert(array("filename" => "foo", "name" => "test")); 

$retval = $collection->distinct("filename"); 
var_dump($retval); 

$whereClause = array("name" => "pippo"); 
$retval = $collection->distinct("filename", $whereClause); 
var_dump($retval); 

?> 

另一種方法是使用command方法發出distinct命令。考慮其發現從"Data"集合中的所有文件,所有的關鍵"fieldname"不同值以下蒙戈外殼例如:

db.runCommand({ distinct: "Data", key: "filename" }) 

這會返回一個文檔與包含不同filename值的字段命名值:

{ 
    "values": [ "foo", "bar", "abc", "def" ], 
    "stats": { ... }, 
    "ok" : 1 
} 

下一個例子從「數據」集合與文檔其name字段等於"pippo"查詢返回該字段filename的不同值:

db.runCommand({ distinct: "Data", key: "filename", query: { name: "pippo"} }) 

產生一個類似的文件如上述:

{ 
    "values": [ "abc", "def" ], 
    "stats": { ... }, 
    "ok" : 1 
} 

的與迭代等效PHP實現如下:

<?php 
... 
$whereClause = array("name" => "pippo"); 
$filenames = $db->command(
    array(
     "distinct" => "Data", 
     "key" => "filename", 
     "query" => $whereClause 
    ) 
); 

foreach ($filenames['values'] as $filename) { 
    $result1 = var_export($filename, true); 
    echo "value2: ".$result1; 
    $output[] = $result1; 
    echo "</br>"; 
} 

?>