У меня есть коллекция с записями, которые выглядят так:
{"userid": 1, "contents": [{"tag": "what", "value": 100}, {"tag ":" what2 "," value ": 110}]}
Я выполняю MapReduce для этой коллекции с запросами, такими как {" contents.tag ":" what "}.
То, что я хотел бы сделать в своей функции карты, - это создать поле «значение», соответствующее записи в массиве «содержимое», которая соответствует запросу , без необходимости перебирать весь массив .При обычных обстоятельствах я мог бы сделать это, используя оператор $ positional с чем-то вроде content. $. Value.Но в случае MapReduce это не работает.
Подводя итог, вот код, который у меня сейчас есть: `
map=function(){
emit(this.userid, WHAT DO I WRITE HERE TO EMIT THE VALUE I WANT ?);
}
reduce=function(key,values){
return values[0]; //this reduce function does not make sense, just for the example
}
res=db.runCommand(
{
"mapreduce": "collection",
"query": {'contents.tag':'whatever'},
"map": map,
"reduce": reduce,
"out": "test_mr"
}
);`
Есть идеи?
Спасибо!