MongoDB MapReduce(PHP)-获取匹配文档的唯一键
我有一个使用大型MongoDB集合的PHP web应用程序。每个Mongo文档都有一个_类型的字段,可以是红色、绿色或蓝色。我有用户提供的条件:groupName=paint-我需要返回与groupName=paint的文档关联的所有键的列表。这是我的查询,它只执行以下操作:MongoDB MapReduce(PHP)-获取匹配文档的唯一键,php,mongodb,mapreduce,Php,Mongodb,Mapreduce,我有一个使用大型MongoDB集合的PHP web应用程序。每个Mongo文档都有一个_类型的字段,可以是红色、绿色或蓝色。我有用户提供的条件:groupName=paint-我需要返回与groupName=paint的文档关联的所有键的列表。这是我的查询,它只执行以下操作: $map = new MongoCode(' function(){ var keys = []; Object.keys(this).forEach(function(k){
$map = new MongoCode('
function(){
var keys = [];
Object.keys(this).forEach(function(k){
if(k != "_id" && k != "_type"){
keys.push(k);
}
})
emit(this.type,{"keys":keys});
}
');
$reduce = new MongoCode('
function(key,values){
var uniqueKeys = {};
var result = [];
values.forEach(function(value){
value.keys.forEach(function(k){
if(!uniqueKeys[k]){
uniqueKeys[k] = 1;
result.push(k);
}
})
})
return {"keys":result};
}
');
$keyName = "groupName";
$keyValue = "paint";
$commandOutput = $db->command(array(
'mapreduce' => 'searchCollection', // collection name
'map' => $map,
'reduce' => $reduce,
'query' => array($keyName => $keyValue),
"out" => 'groupNameKeysCollection' // outputting to a collection
));
这非常有效,但我需要知道每个被吐出的键的_type的值。我如何才能将其粘贴到返回的每个密钥上?我很惊讶,在一个大型集合中,它可以内嵌到您的应用程序中。让人惊讶的是,在实际查看MR之前,您是否尝试过首先使用聚合框架完成此操作?那是为这种东西设计的哦是吗?我必须尝试一下聚合框架——我对高级MongoDB非常不熟悉。。。如果有人有这样的例子,我很乐意看到。我很惊讶在文档中找不到一个例子。。。