在mongodb中使用替换进行多次搜索?

时间:2019-07-03 12:09:20

标签: mongodb

具有以下结构的数据库:

ng build --base-href ./ --prod

我需要将“中标”的值从“ 1.950”更改为“ 1950”。 可能有很多含义,可能有所不同,因此 $ replaceOne()不适合。 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

继续从您的last post中获得答案。

我认为您可以在$project阶段的$out阶段使用$split$reduce,将管道中所有此类事件转换为管道的最后阶段。

这个想法是用split"."的字符串concat返回数组以形成一个字符串,但是没有".",然后您可以继续普通过程。

由于超时,您收到错误$out failed: { ok: 0.0, errmsg: "operation exceeded time limit", code: 50, codeName: "MaxTimeMSExpired" },可以使用$maxTimeMS

来增加默认超时
db.collection_name.aggregate([
    {
        $project: {
            category : "$category",
            category_name : "$category_name",
            lot_title : "$lot_title",
            seller_name : "$seller_name",
            seller_country : "$seller_country",
            bid_count : "$bid_count",
            winning_bid : { 
                $toInt : {
                    $substr : [
                        {
                            $reduce : {
                                input : { $split : ["$winning_bid","."]}},
                                initialValue: "",
                                in: { $concat : ["$$value", "$$this"] }
                            }
                        },
                        2,
                        -1
                    ]
                }
            },
            bid_amount : "$bid_amount",
            lot_image : "$lot_image"
        }
    },{
        $out : "collection_name"
    }
]).maxTimeMS(100)

您可以根据需要增加超时时间。

我还没有测试过代码,它在理论上应该可以工作,但是您知道了,可以根据需要更改代码。