Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 猫鼬反对数字_Node.js_Backbone.js_Express_Mongoose - Fatal编程技术网

Node.js 猫鼬反对数字

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

如何将ObjectId转换为数字?在我的应用程序中,我正在客户端使用最新的mongoose版本和主干

我的问题是ObjectId总是被放在引号之间,这导致在我的jade模板和我的客户机上出现双引号,如“233453452534”


编辑:

我正在查询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