use*_*572 2 hash md5 mongoose mongodb node.js
问题: 我目前有一个拥有100,000个文档的mongo集合.每个文档都有3个字段(_id,name,age).我想为每个名为hashValue的文档添加第4个字段,该字段存储每个文档名称字段的md5哈希值.
我目前可以通过mongo shell或Mongoose ODM与我的集合进行交互,作为nodeJS应用程序的一部分.
可能的解决方案:
我意识到这不起作用(不要相信你可以用这种方式迭代光标),但希望它能显示我正在尝试做的事情.
var crypto = require('crypto');
MyCollection.find().forEach(function(el){
var hash = crypto.createHash('md5').update(el.name).digest("hex");
el.name = hash;
el.save()
});
Run Code Online (Sandbox Code Playgroud)
使用mongo Shell - 几乎和上面一样,我意识到上面的语法会起作用.唯一的问题是我不知道如何在mongo shell中创建md5哈希.但我能够遍历每个文档并添加一个字段.
(可能的解决方法) - 这样做的目的是能够基于名称值的md5哈希进行查询.我相信mongo允许你创建一个散列索引(链接在这里).唯一的问题是,我找不到任何人使用它进行查询的例子(似乎只用于分片),我不确定这是否会在以后工作.(示例:我想md5哈希我从用户收集的名称,然后查询我的mongo集合,看看我是否可以在hashValue字段中找到md5哈希)
Javascript已经有md5哈希函数,名为hex_md5.它也可以在mongo控制台中使用.
> hex_md5('john')
527bd5b5d689e2c32ae974c6229ff785
Run Code Online (Sandbox Code Playgroud)
因此,要更新您的案例中的记录,您可以在mongo控制台中使用以下代码段:
db.collection.find().forEach( function(data){
data.hashValue = hex_md5(data.name);
db.collection.save(data);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6901 次 |
| 最近记录: |