当前位置: 首页 > 知识库问答 >
问题:

比较猫鼬_id和琴弦

陈扬
2023-03-14

我有一个node.js应用程序,它提取一些数据并将其粘贴到对象中,如下所示:

var results = new Object();

User.findOne(query, function(err, u) {
    results.userId = u._id;
}

当我基于存储的ID执行if/then时,比较永远不会为真:

if (results.userId == AnotherMongoDocument._id) {
    console.log('This is never true');
}

当我对两个id执行console.log时,它们完全匹配:

User id: 4fc67871349bb7bf6a000002 AnotherMongoDocument id: 4fc67871349bb7bf6a000002

我假设这是某种类型的数据类型问题,但我不确定如何将results.userId转换为一种数据类型,这将导致上述比较结果为真,而我的外包大脑(也称谷歌)也无法提供帮助。

共有3个答案

阚元白
2023-03-14

将对象id转换为字符串(使用toString()方法)将完成此工作。

宋新知
2023-03-14

ObjectIDs是对象,因此如果您只是将它们与==进行比较,您就是在比较它们的引用。如果要比较它们的值,需要使用ObjectID.equals方法

if (results.userId.equals(AnotherMongoDocument._id)) {
    ...
}
经福
2023-03-14

Mongoose使用mongodb本机驱动程序,该驱动程序使用自定义ObjectID类型。您可以使用.equals()方法比较ObjectID。在您的示例中,results.userId.equals(AnotherMongoDocument.u id)。如果希望以JSON格式存储ObjectID的字符串化版本或cookie,ObjectID类型还有一个toString()方法。

如果使用ObjectID=要求("mongoDB")。ObjectID(需要mongodb本机库),您可以检查是否results.userId是一个有效的标识符,results.userId instanceof ObjectID。

等等。

 类似资料:
  • 问题内容: 我有一个node.js应用程序,它可以提取一些数据并将其粘贴到对象中,如下所示: 当我基于存储的ID执行if / then时,比较永远不会成立: 当我执行两个ID的console.log时,它们完全匹配: 我以为这是某种数据类型问题,但是我不确定如何将result.userId转换为数据类型,从而导致上述比较正确,而我的外包大脑(又名Google)无法提供帮助。 问题答案: Mongo

  • 问题内容: 和猫鼬有什么区别?参考哪个更好? 问题答案: 从文档中: Mongoose默认情况下为您的每个模式分配一个id虚拟获取器,该获取器将文档_id字段强制转换为字符串,对于ObjectIds,则返回其hexString。 因此,基本上,getter返回文档的字符串表示形式(默认情况下将其添加到所有MongoDB文档中,并且默认类型为)。 关于什么是更好的引用,这完全取决于上下文(即,您想要

  • 问题内容: 我有一个简单的工具来构建文档集合,然后自动格式化它们以进行EPUB或LaTeX渲染,该工具写在ExpressJS之上。我正在使用Coffeescript,如果那很重要(我对此表示怀疑)。 使用猫鼬,我有以下几点: Offrefs没有指定它的含义,因为我希望能够在其他活页夹中包含一些活页夹,以创建逻辑集合:“这些用于打印机”,“这些用于epub”,“这些仅用于Web, ”等等。(我已经剔

  • 我正在使用Node.js和Mongoose检索Mongo文档,如下所示: 但它没有返回“_id”字段,我遗漏了什么? 在文档中,它说默认情况下应该包括_id 谢谢 **编辑** 解决方案:我必须在模式中指定它: var schema=新猫鼬。模式({u id:String……。});

  • 问题内容: 我想从我的Node.js应用程序中的Mongoose设置中检索一些数据。我注意到,无论我写什么作为字段选择,我总是会得到该字段。有没有一种方法不可以获取它?我现在是这样的: 并记录下包含该字段的结果。 问题答案: 必须明确排除。例如,

  • 问题内容: 我从Mongoose网站上阅读了快速入门,几乎复制了代码,但是无法使用Node.js连接MongoDB。 这是我的代码。控制台仅打印,不打印。我哪里错了? 问题答案: 调用时,它将建立与数据库的连接。 但是,您在以后的某个时间点(处理请求时)附加了事件侦听器,这意味着该连接可能已经处于活动状态,并且该事件已经被调用(您尚未监听它)。 。 您应该重新排列代码,以使事件处理程序尽可能(及时