У меня есть супер простой тест уменьшения карты ... который не работает последовательно. Короче говоря, я просто ищу дубликаты записей. У меня есть коллекция, которая имеет:
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
Итак, я должен получить:
amazon1 => 2
amazon2 => 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. Но я получаю:
amazon1 => 1,00000
amazon2 => 1,00000
В моем лог-файле у меня есть:
Сб 28 августа 13:22:50 [conn582] CMD: drop 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]
Buildindex
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
records 0secs Sat 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: 0 {name: " id ", нс:
"personalizr_test.tmp.mr.mapreduce_1283016170_139",
ключ: {_id: 1}} сб 28 августа 13:22:50
[conn582] сделано для 0 записей 0сек
Ключ: amazon1 Значения: 1 Ключ: amazon2
Значения: 1 сб 28 августа 13:22:50
[conn582] CMD: падение
personalizr_test.tmp.mr.mapreduce_1283016170_139_inc
Сб 28 августа 13:22:50 [conn582] CMD:
отбросьте personalizr_test.All идеи
сгруппированы по ключу сб 28 августа 13:22:50
[conn582] конец соединения
127.0.0.1:56135
1, 2, 1 указывает на то, что функция карты работает правильно. Это правильные элементы в правильном порядке, но функция сокращения выглядит странно. Я дважды вызываю уменьшение для amazon1, и во второй раз значение неверно. Другое дело, что после первого вызова mongo создает индекс. Я предполагаю, что он ждет первых данных, чтобы выяснить, какими будут форматы данных, чтобы он мог генерировать индекс соответствующим образом. Но я не понимаю, почему мне звонят
Ключ: amazon1 Значения: 1 звонок
Есть предложения?
Несколько других интересных моментов:
монго 1.6.1
mongoid 2.0.0.beta16
бсон 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" }
Предложения