Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/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 如何在MongoDB中检查一个文档是否链接到另一个文档_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 如何在MongoDB中检查一个文档是否链接到另一个文档

Node.js 如何在MongoDB中检查一个文档是否链接到另一个文档,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,假设我有两个集合: 使用者 代币 我试图检查id为5c81347b00370c2848db8725的令牌是否链接到id为5c810da8c714a02e84d16d16的用户 第一个问题是,我只有用户名来查找用户详细信息,因此这是我的解决方案: User.findOne({ username: req.body.username }, async function (err, user) { let token = await Token.findOne({ token: req.bod

假设我有两个集合:

使用者

代币

我试图检查id为
5c81347b00370c2848db8725
的令牌是否链接到id为
5c810da8c714a02e84d16d16
的用户

第一个问题是,我只有用户名来查找用户详细信息,因此这是我的解决方案:

User.findOne({ username: req.body.username }, async function (err, user) {
    let token = await Token.findOne({ token: req.body.token });

    console.log(token._userId);
    console.log(user._id);
    console.log(token._userId != user._id);

    if (token == null || token._userId != user._id) {
       //Error happened..
    }
});
现在,上面的代码将返回以下结果:

5c810da8c714a02e84d16d16
5c810da8c714a02e84d16d16
true

但是应该返回
false
,因为记录是相等的。。我做错了什么?

相等操作符对于比较本地类型(例如字符串)非常有用。在MongoDB中,
ObjectID
是一个不能与
=
运算符进行比较的对象

Mongoose使用mongodb本机驱动程序。它们使用来自Mongodb驱动程序的本机
ObjectID
类型。可以使用
.equals()
方法比较对象ID

根据您的示例,您应该将支票写为:

user._id.equals(token._userId)

请注意,如果要使用Equal,则应在进行比较之前将ObjectId转换为字符串:

user._id.toString() === token._userId.toString()

好的,基本上我的解决方案不起作用,因为对象不是字符串,但mongoThat的对象是正确的
user._id.equals(token._userId)
user._id.toString() === token._userId.toString()