Node.js 猫鼬反对数字
如何将ObjectId转换为数字?在我的应用程序中,我正在客户端使用最新的mongoose版本和主干 我的问题是ObjectId总是被放在引号之间,这导致在我的jade模板和我的客户机上出现双引号,如“233453452534”Node.js 猫鼬反对数字,node.js,backbone.js,express,mongoose,Node.js,Backbone.js,Express,Mongoose,如何将ObjectId转换为数字?在我的应用程序中,我正在客户端使用最新的mongoose版本和主干 我的问题是ObjectId总是被放在引号之间,这导致在我的jade模板和我的客户机上出现双引号,如“233453452534” 编辑: 我正在查询mongodb this.users.find({},function(err,docs){ cb(null,docs) }) console.log(文档)显示 在我的模板中 option(data-id=val._id) #{val.nam
编辑: 我正在查询mongodb
this.users.find({},function(err,docs){
cb(null,docs)
})
console.log(文档)显示
在我的模板中
option(data-id=val._id) #{val.name}
我把这个传给res.render
res.render('test.jade',docs)
我的html呈现:
""5220bb43b754af4118000001""
在我的对象id周围加上双引号。
我试图在一个模式中设置一个数字,如果它是一个数字,那么它周围就没有引号,所以我猜这是因为它是一个objectID。这是未经测试的,但我想你应该这样做:
var idNum = parseInt(objectId.valueOf(), 16);
本质上是12字节的十六进制字符串。这使得它们大于JavaScript数字(2^53)的MAX_值,因此您可能会在转换过程中遇到错误。但是,我的node.js环境(0.11.6)中的Number.MAX_VALUE
可以处理该值。所以你可能是安全的
为什么要将对象ID转换为数字?您真的不应该对ObjectId执行算术运算…尝试使用虚拟id代替\u id
option(data-id=val.id) #{val.name}
而不是
option(data-id=val._id) #{val.name}
以防你在使用猫鼬以外的东西时遇到同样的问题:我在使用猫鼬时也遇到过同样的问题
不知怎的,Jade在将mongo_id呈现为HTML属性时会吓一跳
对我来说,解决办法是:
// instead of
option(data-id=val._id)
// try
option(data-id="#{val._id}")
我假设您希望对象的唯一id是一个整数/数字(对于最终用户,有时只是一个易于使用的小整数)。我有相同的票号用例。有时,您希望最终用户能够直接引用记录id,但不需要那些时髦的字符。所以你可能真的想把它转换成一个简单的整数,比如:000001,而不是5220bb43b754af4118000001
在这里,我主要是回答问题的标题,以帮助我和其他人,我希望它回答了问题的整体
实际上,对于上述用例或大多数用例,您不需要转换整个对象id:
据此,
以字符表示,这意味着:
timestamp → 0-7
machine → 8-13
pid → 14-17
inc → 18-23
这意味着:
“5220bb43b754af4118000001”
细分为:
timestamp → 5220bb43
machine → b754af
pid → 4118
inc → 000001
您可能只需要id的inc部分,或者至少需要时间戳和inc
let objID=“5220bb43b754af4118000001”;
设id=objID.substr(18);
console.log(id);
// 000001
//如果解析为int,则变为1
希望这对某人有所帮助。您需要更多地说明问题所在。这些引语来自哪里?为什么要将其转换为数字?我无法将“强制转换”为ObjectId的整数返回id=mongoose.Types.ObjectId(123);parseInt(id.valueOf(),16)代码>没有给我返回123。这肯定比创建一个额外的索引和处理“预”保存和其他东西容易。虽然我不知道这是否是一个好的方法,采取这一点,然后抵消它,使你得到零的第一项。
timestamp → 0-7
machine → 8-13
pid → 14-17
inc → 18-23
timestamp → 5220bb43
machine → b754af
pid → 4118
inc → 000001