從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>";
}
?>
要傳遞在字符串而不是陣列。 – PeeHaa
在你的情況$ whereClause是我看到的字符串,你用雙引號將值包圍。刪除雙引號,並讓$ whereClause是一個php數組。 – tudor
感謝您的回答。當我刪除雙引號我收到此錯誤:警告:MongoCollection :: distinct()期望參數1是字符串,數組給出在C:\ wamp \ www \ prove \ selectMongoDB.php 44行 – bomberdini