У меня есть ниже карты:MongoDB карта уменьшить тривиальным запрос
var mapFunction = function() {
if(this.url.match(/http:\/\/test.com\/category\/.*?\/checkout/)) {
var key=this.em;
var value = {
url : 'checkout',
count : 1,
account_id:this.accId
}emit(key,value); };
if(this.url.match(/http:\/\/test.com\/landing/)) {
var key=this.em;
var value = {
url : 'landing',
count : 1,
account_id:this.accId
}emit(key,value); };
}
Тогда я определил уменьшить что-то, как показано ниже:
var reduceFunction = function (keys, values) {
var reducedValue = {count_checkout:0, count_landing:0};
for (var idx = 0; idx < values.length; idx++) {
if(values[idx].url=='checkout'){
reducedValue.count_checkout++;
}
else {
reducedValue.count_landing++;
}
}
return reducedValue;
}
Теперь, позволяет сказать, что у меня есть только 1 запись:
{
"_id" : ObjectId("516a7cff6dad5949ddf3f7b6"),
"ip" : "1.2.3.4",
"accId" : 123,
"em" : "[email protected]",
"pgLdTs" : ISODate("2013-04-11T18:30:00Z"),
"url" : "http://test.com/category/prr/checkout",
"domain" : "www.test.com",
"pgUdTs" : ISODate("2013-04-14T09:55:11.682Z"),
"title" : "Test",
"ua" : "Mozilla",
"res" : "1024*768",
"rfr" : "www.google.com"
}
Теперь, если я увожу свою карту, уменьшите, как показано ниже:
db.test_views.mapReduce(mapFunction,reduceFunction,{out:{inline:1}})
Я получаю ниже результат возвращается:
{
"_id" : "[email protected]",
"value" : {
"url" : "checkout",
"count" : 1,
"account_id" : 123
}
}
Таким образом, ее в основном возвращаются мне карту. Теперь, если я отправлю еще один документ для этого идентификатора электронной почты. Наконец, это становится чем-то вроде ниже.
{
"_id" : ObjectId("516a7cff6dad5949ddf3f7b6"),
"ip" : "1.2.3.4",
"accId" : 123,
"em" : "[email protected]",
"pgLdTs" : ISODate("2013-04-11T18:30:00Z"),
"url" : "http://test.com/category/prr/checkout",
"domain" : "www.test.com",
"pgUdTs" : ISODate("2013-04-14T09:55:11.682Z"),
"title" : "Test",
"ua" : "Mozilla",
"res" : "1024*768",
"rfr" : "www.google.com"
}
{
"_id" : ObjectId("516a7e1b6dad5949ddf3f7b7"),
"ip" : "1.2.3.4",
"accId" : 123,
"em" : "[email protected]",
"pgLdTs" : ISODate("2013-04-11T18:30:00Z"),
"url" : "http://test.com/category/prr/checkout",
"domain" : "www.test.com",
"pgUdTs" : ISODate("2013-04-14T09:59:55.326Z"),
"title" : "Test",
"ua" : "Mozilla",
"res" : "1024*768",
"rfr" : "www.google.com"
}
Затем я иду снова и огонь карты уменьшить, это дает мне правильные результаты
{
"_id" : "[email protected]",
"value" : {
"count_checkout" : 2,
"count_landing" : 0
}
}
Может кто-нибудь, пожалуйста, помогите мне понять, почему она возвращает мне карту для одного документа и Безразлично» t сделать подсчет в сокращении.
Спасибо за помощь.
-Lalit