Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MongoDB中保存MapReduce结果?_C#_Mongodb_Mapreduce_Mongodb .net Driver_Nosql - Fatal编程技术网

C# 如何在MongoDB中保存MapReduce结果?

C# 如何在MongoDB中保存MapReduce结果?,c#,mongodb,mapreduce,mongodb-.net-driver,nosql,C#,Mongodb,Mapreduce,Mongodb .net Driver,Nosql,我有两个收藏:PriceShop(ShopId,Price,DrugId),Druge(DrugId,MaxPrice,MinPrice) 我使用map/reduce查找PriceShop集合中相同药物的maxPrice、minPrice,然后使用map/reduce结果更新药物集合 但在MongoDb 2.4中,我不能再在map或reduce函数中使用“db.Drug.Update”,那么还有其他解决方案可以做到这一点吗。这是我的map/reduce代码: db.PriceShop.MapRe

我有两个收藏:PriceShop(ShopId,Price,DrugId),Druge(DrugId,MaxPrice,MinPrice)

我使用map/reduce查找PriceShop集合中相同药物的maxPrice、minPrice,然后使用map/reduce结果更新药物集合

但在MongoDb 2.4中,我不能再在map或reduce函数中使用“db.Drug.Update”,那么还有其他解决方案可以做到这一点吗。这是我的map/reduce代码: db.PriceShop.MapReduce(map,reduce)

函数映射(){
发出(这个药){
“计数”:0.5,
“maxprice”:这个价格,
“minprice”:这个价格,
“stateid”:这个.State
});
发出(这个药){
“计数”:0.5,
“maxprice”:这个价格,
“minprice”:这个价格,
“stateid”:这个.State
});
}
功能减少(键、arr_值){
var计数=0;
var maxprice=0;
var-minprice=0;
var drugItem=db.druge.findOne({
“_id”:密钥
});
arr_值。forEach(功能(项目){
如果(项目[“stateid”]==0){
计数+=项目[“计数”];
如果(项目[“maxprice”]>maxprice&&item[“maxprice”]>0){
maxprice=项目[“maxprice”];
}
如果(最小价格==0){
minprice=项目[“minprice”];
}否则如果(项目[“minprice”]>0和项目[“minprice”]

}

是否需要重构代码,以便Reduce的输出就是您在集合中设置的输出?(我很惊讶在MapReduce中删除对集合的写入功能花费了10gen这么长的时间。)@WiredPairie可能是我可以直接“renturn{“MaxStorePrice”:MaxStorePrice,“MinStorePrice”:MinStorePrice,“PriceShopCount”:PriceShopCount},然后如何更新它,我需要使用“foreach”吗要枚举输出和更新中的每个项目?或者只是更新输出?你能把MapReduce调用的
out
设置为一个新集合并在那里收集结果吗?@wiredparie-Hmm,也许不是,实际上现在我已经设置了一个集合“keeptempriceshop”,但它对文档的评分如下:{u id:1,值:{“MaxStorePrice”:MaxStorePrice,“MinStorePrice”:MinStorePrice,“PriceShopCount”:PriceShopCount}},但我的最终目的是更新药品收集。也许这是一个糟糕的设计,我走错了方向,然后告诉我,谢谢。
function Map() {
emit(this.Drugid, {
    "count" : 0.5,
    "maxprice" : this.Price,
    "minprice" : this.Price,
    "stateid" : this.State
});
emit(this.Drugid, {
    "count" : 0.5,
    "maxprice" : this.Price,
    "minprice" : this.Price,
    "stateid" : this.State
});
}

function Reduce(key, arr_values) {
var count = 0;
var maxprice = 0;
var minprice = 0;
var drugItem = db.drug.findOne({
        "_id" : key
    });
arr_values.forEach(function (item) {
    if (item["stateid"] == 0) {
        count += item["count"];
        if (item["maxprice"] > maxprice && item["maxprice"] > 0) {
            maxprice = item["maxprice"];
        }
        if (minprice == 0) {
            minprice = item["minprice"];
        } else if (item["minprice"] > 0 && item["minprice"] < minprice) {
            minprice = item["minprice"];
        }
    }

});
var MaxStorePrice = 0;
var MinStorePrice = 0;
var PriceShopCount = 0;
if (drugItem != null && drugItem["MaxStorePrice"] != null) {
    MaxStorePrice = drugItem["MaxStorePrice"];
}
if (drugItem != null && drugItem["MinStorePrice"] != null) {
    MinStorePrice = drugItem["MinStorePrice"];
}
if (drugItem != null && drugItem["PriceShopCount"] != null) {
    PriceShopCount = drugItem["PriceShopCount"];
}
if (MaxStorePrice != maxprice || MinStorePrice != minprice || PriceShopCount != count) {
    db.drug.update({
        "_id" : key
    }, {
        "$set" : {
            "MaxStorePrice" : maxprice,
            "MinStorePrice" : minprice,
            "PriceShopCount" : NumberInt(count)
        }
    });
}
return {
    "count" : count,
    "maxprice" : maxprice,
    "minprice" : minprice,
    "MaxStorePrice" : MaxStorePrice,
    "MinStorePrice" : MinStorePrice,
    "PriceShopCount" : PriceShopCount
};