MongoDB将文档字段分为两个字段

我有一个MongoDB文档,其中包含超过280万个常用密码(在SHA1中隐藏)及其流行度的文档。

当前,我已按照以下架构导入文档

{"_id":"5ded1a559015155eb8295f48","password":"20EABE5D64B0E216796E834F52D61FD0B70332FC:2512537"}

尽管我想将其拆分,这样我才能获得人气值,并且看起来像这样

{"_id":"5ded1a559015155eb8295f48","password":"20EABE5D64B0E216796E834F52D61FD0B70332FC","popularity":2512537}

我不确定如何使用passwordpassword分成两个popularity:来拆分字符串

vcaonimav 回答:MongoDB将文档字段分为两个字段

您可以使用Aggregation Framework将当前password分成两个字段。您需要从$indexOfBytes开始获得:的位置,然后需要$substr根据评估的位置创建新字段。

db.collection.aggregate([
    {
        $addFields: {
            colonPos: { $indexOfBytes: ["$password",":"] }
        }
    },{
        $addFields: {
            password: { $substr: [ "$password","$colonPos" ] },popularity: { $substr: [ "$password","$colonPos",{ $strLenBytes: "$password" } ]  }
        }
    },{
        $project: {
            colonPos: 0
        }
    }
])

Mongo Playground

最后一步,您可以使用$out来获取所有聚合结果并将它们写入新的或现有的集合中。

编辑:使用$split的替代方法(感谢@matthPen):

db.collection.aggregate([
    {
        $addFields: { 
            password: { $arrayElemAt: [ { "$split": [ "$password",":"] },0 ] },popularity: { $arrayElemAt: [ { "$split": [ "$password",1 ] }
        }
    }
])

Mongo Playground

本文链接:https://www.f2er.com/2953194.html

大家都在问