У меня есть очень простой тест уменьшения карты... который не работает последовательно. Короче говоря, я просто ищу повторяющиеся записи. У меня есть коллекция, в которой есть:
GiftIdea - site_id - site_key
site_id + site_key должны быть уникальными, но в настоящее время это не так. Итак, у меня есть следующий код уменьшения карты:
var map = function() {
print(this.site_key);
emit(this.site_id + this.site_key, 1);
};
var reduce = function(key,values) {
var sum=0;
for(var i in values){
print(key + ": " + ++sum);
}
return sum;
};
С этими входными данными:
GiftIdea
-site_id: amazon -site_key:2 -site_id: amazon -site_key: 2
-site_id: amazon -site_key: 1
Итак, я должен получить:
амазон1 => 2 амазон2 => 1
Вот что происходит, когда я запускаю его
> o = db.gift_ideas.mapReduce(map,reduce)
{
"result" : "tmp.mr.mapreduce_1283015268_136",
"timeMillis" : 5,
"counts" : {
"input" : 3,
"emit" : 3,
"output" : 2
},
"ok" : 1,
}
Хорошо, отличные новости, я испустил 3 строки и вывел 2. Но я получаю:
амазон1 => 1.00000 амазон2 => 1.00000
В моем файле журнала у меня есть:
Сб 28 авг 13:22:50 [conn582] CMD: удалить personalizr_test.tmp.mr.mapreduce_1283016170_139 Сб 28 авг 13:22:50 [conn582] CMD: удалить personalizr_test.tmp.mr.mapreduce_1283016170_139_inc 1 2 1
Ключ: amazon1 Значения: 2 Сб, 28 августа, 13:22:50 [conn582] создание нового индекса для {0:1} для personalizr_test.tmp.mr.mapreduce_1283016170_139_inc, сб, 28 августа, 13:22:50 [conn582] Создание индекса personalizr_test.tmp. mr.mapreduce_1283016170_139_inc idxNo:0 { ns: "personalizr_test.tmp.mr.mapreduce_1283016170_139_inc", ключ: { 0: 1 }, имя: "0_1" } сб 28 августа 13:22:50 [conn582] сделано для 2 записей 0 секунд сб 28 августа 13:22:50 [conn582] создание нового индекса для {_id: 1} для personalizr_test.tmp.mr.mapreduce_1283016170_139 сб 28 августа 13:22:50 [conn582] Buildindex personalizr_test.tmp.mr.mapreduce_1283016170_139 { idxNo:039 name: "id", ns: "personalizr_test.tmp.mr.mapreduce_1283016170_139", key: { _id: 1 } } Sat Aug 28 13:22:50 [conn582] сделано для 0 записей 0secs Key . test.Все идеи сгруппированы по ключу Сб 28 августа 13:22:50 [conn582] end connection 127.0.0.1:56135
1, 2, 1 означает, что функция карты работает правильно. Это правильные элементы в правильном порядке, но функция сокращения выглядит странно. Я вызываю сокращение для amazon1 дважды, и во второй раз значение неверно. Другое дело, что после первого вызова монго создает индекс. Я предполагаю, что он ждет первых данных, чтобы выяснить, какими будут форматы данных, чтобы он мог соответствующим образом сгенерировать индекс. Но я не понимаю, почему мне звонят: Ключ: amazon1 Значения: 1 звонок
Какие-либо предложения?
Несколько других интересных моментов: mongo 1.6.1 mongoid 2.0.0.beta16 bson 1.0.4 bson_ext 1.0.4
Действительно странно то, что tt работает с другой базой данных с реальными данными!
Вот как выглядит одна из записей в заполненной базе данных:
{ "_id" : ObjectId("4c69b7164914e54d9b007c34"), "avg_score" : null, "category_ids" : [ ], "created_at" : "Thu Aug 19 2010 05:57:25 GMT-0400 (EDT)", "desc" : null, "enabled" : null, "idea_ratings" : [ ], "images" : [
{
"url" : "http://ecx.images-amazon.com/images/I/515cLXdLUNL._SL75_.jpg",
"_id" : ObjectId("4c69b7164914e54d9b007c35"),
"height" : 61,
"width" : 75
}
], "num_ratings" : null, "owner_id" : null, "price" : -1, "rating_stats" : { "_id" : ObjectId("4c7746877719ad0712000dc8"), "total" : -1, "count" : 1, "average" : -1, "sum_of_weights" : 1 }, "ratings" : null, "response_groups" : [ ], "sales_rank" : 40751, "site_id" : "amazon", "site_key" : "B00001OPJE", "title" : "SNK NEOGEO Pocket Color Console in Platinum Silver", "updated_at" : "Fri Aug 27 2010 21:34:40 GMT-0400 (EDT)", "url" : "http://www.amazon.com/NEOGEO-Pocket-Color-Console-Platinum-Silver/dp/B00001OPJE?SubscriptionId=1VHSF1NEXNWHR2A8BA82&tag=gifter-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B00001OPJE" }
А вот и один из моих образцов
{ "_id" : ObjectId("4c7948667719ad410f000005"), "created_at" : "Sat Aug 28 2010 13:33:26 GMT-0400 (EDT)", "enabled" : true, "rating_stats" : { "_id" : ObjectId("4c7948667719ad410f00000d"), "total" : 2, "count" : 2, "average" : 1, "sum_of_weights" : 2 }, "sales_rank" : 10, "site_id" : "amazon", "site_key" : "1", "title" : "title1", "updated_at" : "Sat Aug 28 2010 13:33:26 GMT-0400 (EDT)", "url" : "url1" }
Предложения?