PHP - MONGODB - 查询中的变量

时间:2016-03-01 11:34:47

标签: php mongodb

我在MongoDB中使用PHP变量时遇到问题。

此查询没问题:

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

但是这个查询不起作用:

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

其中:

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

为什么?

1 个答案:

答案 0 :(得分: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 命令。请考虑以下mongo shell示例,该示例从"fieldname"集合中的所有文档中查找键"Data"的所有不同值:

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

这将返回一个文档,其中包含名为values的字段,其中包含不同的filename值:

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

下一个示例从&#34;数据&#34;中返回字段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>";
}

?>