温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Multiple search with replacement in mongodb?
mongodb

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

发布于 2020-03-27 10:26:39

具有以下结构的数据库:

_id:5d0fe110d7b8c01a4c633222
Category:"Stripveiling (Nederlands)"
Lot title:"Blake en Mortimer - S.O.S. Meteoren - 1e Druk HC 1959"
Seller name:"Stripsmagazijn"
Seller country:"Nederland"
Bids count:22
Winning bid:"€ 1.950"
Bid amount:"Closed"

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

查看更多

查看更多

提问者
kshnkvn
被浏览
157
Ravi Shankar Bharti 2019-07-03 22:00

继续上一个帖子的答案

我认为您可以阶段中使用$ split$ reduce作为管道的最后阶段来转换数据库中所有此类事件。$project$out

这个想法是将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)

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

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