MongoDB 将文档字段拆分成两个字段

3

我可以帮您翻译这段与IT技术相关的内容。该文档是一个MongoDB文档,包含超过280万个常见密码(使用SHA1哈希算法加密)以及它们的流行程度。

目前,我已经按照以下模式导入了这些文档:

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

虽然我想将其拆分,以便我可以获得受欢迎程度值,它看起来会像这样

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

这个问题是我不确定如何将password通过使用:来拆分字符串为passwordpopularity.

1个回答

4
你可以使用聚合框架将当前的password拆分为两个字段。你需要从$indexOfBytes开始,以获取:的位置,然后你需要使用$substr根据评估的位置创建新字段。
db.collection.aggregate([
    {
        $addFields: {
            colonPos: { $indexOfBytes: ["$password",":"] }
        }
    },
    {
        $addFields: {
            password: { $substr: [ "$password", 0, "$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

的翻译结果是

{{链接1:Mongo Playground}}


只是想知道:为什么不在这里简单地使用$split呢? - undefined
@matthPen $split在这里很有意义,我修改了我的答案,谢谢! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接