我在MongoDB中使用PHP变量时遇到问题。
此查询正常:
$cursor1 = $collection->distinct(array('filename'=> array(['name'=>'pippo'])));
但是此查询不起作用:
$cursor1 = $collection->distinct(array('filename'=> $whereClause));
哪里:
$whereClause = "array(['name'=>'pippo'])"
为什么?
在文档中,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
命令。请考虑以下 mongo shell 示例,该示例从 "Data"
集合中的所有文档中查找键"fieldname"
的所有不同值:
db.runCommand({ distinct: "Data", key: "filename" })
这将返回一个文档,其中包含一个名为 values 的字段,其中包含不同的filename
值:
{
"values": [ "foo", "bar", "abc", "def" ],
"stats": { ... },
"ok" : 1
}
下一个示例返回从"Data"集合filename
字段的非重复值,并对name
字段等于"pippo"
的文档进行查询:
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>";
}
?>