如何使用Node.js从Mongodb中提取NumberLong数据?

5

我正在使用Node.js,并尝试使用以下代码将时间戳数据存储在Mongodb数据库中:

`articleProvider.saveUser({
        userID : user,
        email : email,
        address : "",
        time : new Date().getTime(),
        },function(error,userData){
                if(!userData){ callback(error);}
                else{ callback(null,userData);}
            });
        }
    });`

数据库中存储的数据(来自Mongo shell)是:

{ "userID" : "hem", "email" : "hereshem@gmail.com", "address" : "Kathmandu", "time" : NumberLong("1320911838254"), "_id" : ObjectId("4ebb83dea7dd40990e000002") }

但是,如果我在node.js控制台中检索数据,输出结果如下:
{ userID: 'hem',
  email: 'hereshem@gmail.com',
  address: 'Kathmandu',
  time: { low_: -1938088914, high_: 307 },
  _id: 4ebb83dea7dd40990e000002 }

现在我的问题是如何检索具有NumberLong数据类型的“time”字段的值?
它给出了“low_”和“high_”两个不同的字段的输出。但是,我只想要输出“1320911838254”。
有人能帮我吗?
谢谢回复。但是我尝试使用
var value = new Long(low_bits, high_bits).toNumber();

正如Lycha先生所发布的那样,在Node.js平台上会显示一个错误"Long is not defined",如下所示:

var value = new Long(user.time.low_, user.time.high_).toNumber();

ReferenceError: Long is not defined
at /home/developer/Desktop/Express/app.js:65:1
at /home/developer/Desktop/Express/public/js/processData.js:76:10
at /home/developer/Desktop/Express/public/js/dbQuery.js:196:16
at [object Object].<anonymous> (/home/developer/node_modules/mongodb/lib/mongodb/collection.js:743:5)
at [object Object].emit (events.js:67:17)
at [object Object].<anonymous> (/home/developer/node_modules/mongodb/lib/mongodb/connections/server.js:97:12)
at [object Object].emit (events.js:64:17)
at Socket.<anonymous> (/home/developer/node_modules/mongodb/lib/mongodb/connection.js:161:16)
at Socket.emit (events.js:64:17)
at Socket._onReadable (net.js:678:14)

如何在node.js中获取长解析器?有什么想法吗?

感谢strada的回复。但是如何将其存储为Mongodb中的dateObject?数据类型已经定义,有没有方法可以在Mongodb中更改数据类型?以及如何进行解析?

2个回答

3

在长时间的实践中,我找到了最佳解决方案:

articleProvider.saveUser({
    userID : user,
    email : email,
    address : "",
    time : new Date().getTime().toString(),
    },function(error,userData){
            if(!userData){ callback(error);}
            else{ callback(null,userData);}
        });
    }
});

使用 "toString()" 将日期对象存储为字符串对象,在查询之后,使用 "parseInt()" 将字符串对象转换为整数值。

我认为这是一个非常简单而好的解决方案。


1

MongoDB将数字存储为64位对象,但JavaScript不支持该类型,这就是为什么它们必须使用_low和_high。您可以按以下方式获取数字:

var value = new Long(low_bits, high_bits).toNumber();

点击这里了解更多。你应该考虑使用日期对象。


我正在尝试在Compass的Mongo Shell中完成此操作,但是出现了Long未定义的错误。 - Yuval A.

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