Node.js 请求会话id与请求会话不同。\u id

Node.js 请求会话id与请求会话不同。\u id,node.js,mongodb,Node.js,Mongodb,我想了解为什么会这样: req.session._id = doc._id; req.session.id = doc._id; console.log(typeof req.session._id); // object console.log(typeof req.session.id); // string console.log(req.session._id); // 4oqTbA06DcK9cIiU3tnK62Ic.0puZ9uPnIaghMBIQKaIbhIHYzeP8wtS3

我想了解为什么会这样:

req.session._id = doc._id;
req.session.id = doc._id;

console.log(typeof req.session._id); // object
console.log(typeof req.session.id); // string

console.log(req.session._id); // 4oqTbA06DcK9cIiU3tnK62Ic.0puZ9uPnIaghMBIQKaIbhIHYzeP8wtS3MXnzpi+yC1c
console.log(req.session.id); // 4fb01ad2ca42e9552d000001
所以,当我想这样做时:

var myID = req.session._id, myIDm = new BSON.ObjectID(myID); // don't bug
var myID = req.session.id, myIDm = new BSON.ObjectID(myID); // bug: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters

谢谢你告诉我关于这个的所有信息

问题是,
\u id
由mongodb自动生成,类型为
ObjectID
,可以传递给
BSON.ObjectID()
,您会得到具有相同id的新
ObjectID
id
属性不由mongodb管理,如果您将此值放入
BSON.ObjectID()
构造函数,这会引起错误。预期字符串必须为12字节或长度为24的十六进制编码二进制(允许的字符为a-f、a-f、0-9)。希望这有帮助。

是的,但为什么需要session.\u id=object并使用变量id:string。Doc.\u id不更改..它们是两个不同的对象,id由express或connect会话创建,\u id由mongodb管理。是!!确切地我忘记(-uu-'omg)express或connect使用了变量
id
。所以,使用其他变量(例如:iid,_id..等)它可以工作!谢谢你!