Я очень нуб, когда дело доходит до MapReduce, и я выдернул свои волосы из-за этой проблемы.Надеюсь, кто-нибудь может мне помочь.
Моя цель: получить доход от продукта и количество проданных единиц.
Образец документа коллекции транзакций, откуда я запрашиваю у:
{ "_id" : ObjectId( "xxxxxxxxxx" ),
"MerchantID" : { "$ref" : "merchants",
"$id" : ObjectId( "xxxxxxxx" ) },
"TransactionSocialKey" : "xxxxxxxx",
"PurchaseComplete: true,
"Products" : [
{ "ProductID" : { "$ref" : "products",
"$id" : ObjectId( "4ecae2b9cf72ab1f6900xxx1" ) },
"ProductPrice" : 14.99,
"ProductQuantity" : "1" },
{ "ProductID" : { "$ref" : "products",
"$id" : ObjectId( "4ecae2b9cf72ab1f690xxx2" ) },
"ProductPrice" : 14.99,
"ProductQuantity" : "1" } ],
"DateTimeCreated" : Date( 1321919161000 ) }
Как вы можете видеть, у меня есть встроенный массив под названием Products с ProductID, Цена продукта и Количество продукта.
Функция «Моя карта»
map = function(){
if(this.PurchaseComplete === true){
this.Products.forEach(function(Product){
if(Product.ProductID.$id.toString() == Product_ID.toString()){
emit(Product_ID, {
"ProductQuantity" : Product.ProductQuantity,
"ProductPrice" : Product.ProductPrice,
"ProductID" : Product.ProductID.$id.toString()
});
}
});
}
}
Итак, я собираюсь отправлять только Транзакции, которые были завершены.Если транзакция была завершена, я зацикливаюсь на массиве Products и, если Product.ProductID. $ Id равен Product_ID, который я установил в области действия MapReduce, я собираюсь выдать Product из набора.
Для тестирования я настроил свою функцию уменьшения как:
reduce = function(key, Product_Transactions){
return {"Transactions" : Product_Transactions};
}
По какой-то странной причине я получаю такой результат:
[results] => Array
(
[0] => Array
(
[_id] => MongoId Object
(
[$id] => 4ecae2b9cf72ab1f6900xxx1
)
[value] => Array
(
[Transactions] => Array
(
[0] => Array
(
[Transactions] => Array
(
[0] => Array
(
[ProductQuantity] => 1
[ProductPrice] => 14.99
[ProductID] => 4ecae2b9cf72ab1f6900xxx1
)
[1] => Array
(
[ProductQuantity] => 1
[ProductPrice] => 14.99
[ProductID] => 4ecae2b9cf72ab1f6900xxx1
)
It Continues…
)
)
[1] => Array
(
[ProductQuantity] => 1
[ProductPrice] => 12.74
[ProductID] => 4ecae2b9cf72ab1f6900xxx1
)
[2] => Array
(
[ProductQuantity] => 1
[ProductPrice] => 12.74
[ProductID] => 4ecae2b9cf72ab1f6900xxx1
)
)
)
)
)
Я не уверен, почему я получаю этот странный встроенный массив.Ключ emit всегда один и тот же и никогда не меняется.Я действительно потерян для идей о том, где начать устранение неполадок.Любая помощь или руководство будут оценены.