我需要了解MongoCollection-> group()功能。 group()的PHP手册说明了以下内容:
<?php
$collection->insert(array("category" => "fruit", "name" => "apple"));
$collection->insert(array("category" => "fruit", "name" => "peach"));
$collection->insert(array("category" => "fruit", "name" => "banana"));
$collection->insert(array("category" => "veggie", "name" => "corn"));
$collection->insert(array("category" => "veggie", "name" => "broccoli"));
$keys = array("category" => 1);
$initial = array("items" => array());
$reduce = "function (obj, prev) { prev.items.push(obj.name); }";
$g = $collection->group($keys, $initial, $reduce);
echo json_encode($g['retval']);
?>
结果数组类似于:
[{"category":"fruit","items":["apple","peach","banana"]},{"category":"veggie","items":["corn","broccoli"]}]
现在,我看到 MongoCode reduce()函数将项目的名称推送到结果数组中。但是,如果我想在名称之外再推一个字段,即水果的颜色,该怎么办?
基本上,我需要的是这样的输出:[{"category":"fruit","items":[["apple", "red"],["peach", "peach"],["banana", "yellow"]]},{"category":"veggie","items":[["corn", "yellow"],["broccoli", "green"]]}]
所以我认为我应该以某种方式推动()......究竟是什么?我无法在任何地方找到合适的语法。
提前感谢并抱歉我的英语不好: - )
弗朗西斯
答案 0 :(得分:2)
我钉了它!它比我想象的要简单得多。这都是简单的JavaScript!
您所要做的就是构建自己的数组(甚至是关联数组),然后在调用reduce()函数时将其推送到您命名的主数组中。
这是一个例子:
$reduce = "function (obj, prev) { prev.items.push([obj.name, obj.color]); }";
实际上有效,但我想要更多:一个关联数组。所以我这样做了:
reduce = 'function (obj, prev) {
var tempArr = {
"name" : obj.name,
"color" : obj.color,
};
prev.pages.push(tempArr);
}';
并且每个人都过着幸福的生活。
答案 1 :(得分:0)
现在,关键字“name”是一个包含水果名称的字符串。尝试将数组存储到“name”中,如下所示:
$collection->insert(array("category" => "fruit", "name" => array("apple", "red")));
我对MongoDB一无所知,只是想到了逻辑。这可能会对你有所帮助。
答案 2 :(得分:0)
@rajesh我进一步调查了这个问题。也许这只是正确使用MongoCode内部Javascript的问题。
也就是说,可能使用像这样的push()函数
$reduce = "function (obj, prev) { prev.items.push([obj.name, obj.color]); }";
可以做到这一点。我明天会测试一下,希望能给出正确答案。
已发布编辑答案