Node.js 如何在MongoDB中检查一个文档是否链接到另一个文档
假设我有两个集合: 使用者 代币 我试图检查id为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
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()