将md5哈希值添加到mongo集合中

use*_*572 2 hash md5 mongoose mongodb node.js

问题: 我目前有一个拥有100,000个文档的mongo集合.每个文档都有3个字段(_id,name,age).我想为每个名为hashValue的文档添加第4个字段,该字段存储每个文档名称字段的md5哈希值.

我目前可以通过mongo shell或Mongoose ODM与我的集合进行交互,作为nodeJS应用程序的一部分.

可能的解决方案:

  1. 使用Mongoose/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)
  1. 使用mongo Shell - 几乎和上面一样,我意识到上面的语法会起作用.唯一的问题是我不知道如何在mongo shell中创建md5哈希.但我能够遍历每个文档并添加一个字段.

  2. (可能的解决方法) - 这样做的目的是能够基于名称值的md5哈希进行查询.我相信mongo允许你创建一个散列索引(链接在这里).唯一的问题是,我找不到任何人使用它进行查询的例子(似乎只用于分片),我不确定这是否会在以后工作.(示例:我想md5哈希我从用户收集的名称,然后查询我的mongo集合,看看我是否可以在hashValue字段中找到md5哈希)

Sar*_*air 8

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)