У меня есть веб-приложение PHP, которое использует большую коллекцию MongoDB. Каждый монго документ имеет _type
поле, которое может быть red
, green
, или же blue
, У меня есть критерии, предоставленные пользователем: groupName = "paint"
— Мне нужно вернуть список всех ключей, связанных с документами, где groupName = "paint"
, Это мой запрос, который делает именно это:
$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
за каждый ключ, который выплевывает. Как я могу прикрепить это к каждому из возвращенных ключей?
Задача ещё не решена.
Других решений пока нет …