MongoDB:如何直接从控制台添加新的哈希字段?

MongoDB:如何直接从控制台添加新的哈希字段?,mongodb,Mongodb,我有这样的对象: { "_id" : ObjectId( "4e00e83608146e71e6edba81" ), .... "text" : "Text now exists in the database"} 我可以使用com.mongodb.util.hash.longHash方法通过java添加哈希字段来创建 { "_id" : ObjectId( "4e00e83608146e71e6edba81" ), .... "text" : "Text now exists

我有这样的对象:

{ "_id" : ObjectId( "4e00e83608146e71e6edba81" ),
  ....
  "text" : "Text now exists in the database"}
我可以使用com.mongodb.util.hash.longHash方法通过java添加哈希字段来创建

{ "_id" : ObjectId( "4e00e83608146e71e6edba81" ),
  ....
  "text" : "Text now exists in the database",
  "tHash" : -4375633875013353634 }
但这相当缓慢。我希望能够在数据库中执行以下操作:

db.foo.find({}).forEach(函数(x){
x、 tHash=someFunction(x.text);//创建一个与com.mongodb.util.hash.longHash兼容的长哈希 db.foo.save(x); });


有人知道如何在Javascript函数中调用这个长哈希吗?

首先定义一个好的hashCode函数来使用。默认情况下,JavaScript在所有对象上都没有hashCode函数,因此您需要编写一个。或者就用这个:

var hashCode = function(s) {
    if (s == null) return 0;
    if (s.length == 0) return 1;
    var hash = 0;
    for (var i = 0; i < s.length; i++) {
        hash = ((hash << 5) - hash) + s.charCodeAt(i);
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;
};
var hashCode=函数{
如果(s==null)返回0;
如果(s.length==0),则返回1;
var散列=0;
对于(变量i=0;ihash=((hash我放弃了在Javascript中复制Mongo Java驱动程序hash.longHash方法的尝试,因为JS将所有内容都视为一个浮点数,并不像Java那样处理溢出。我在JS中找到了一些复制Java hashCode函数的示例,因此我做了以下工作:

longHash = function(s){
    var hash = 0;
    if (s.length == 0) return hash;
    for (i = 0; i < s.length; i++) {
        char = s.charCodeAt(i);
        hash = ((hash<<5)-hash)+char;
        hash = hash & hash; // Convert to 32bit integer
    }
    return NumberInt(hash);
};

db.foo.find( {} ).forEach( function (x) {
  x.cHash = longHash(x.c); 
  db.foo.save(x); 
});
longHash=函数{
var散列=0;
如果(s.length==0)返回哈希;
对于(i=0;i