【问题标题】:_id get converted from ObjectId to string in MEAN application_id 在 MEAN 应用程序中从 ObjectId 转换为字符串
【发布时间】:2016-09-20 16:09:24
【问题描述】:

我有一个 MEAN 堆栈应用程序。

在我的数据库中,一个文档有一个像这样的 mongo ObjectId:

{ "_id" : ObjectId("57e15b1009cb82cafafafd73"), "name" : "Hello", "artist_id" : "world", "year" : "2000" }

但是当我在前端加载文档时,_id 被转换为字符串,我的对象在登录浏览器时看起来像这样:

{ "_id" : "57e15b1009cb82cafafafd73", "name" : "Hello", "artist_id" : "world", "year" : "2000" }

烦人的是,当我想从前端修改我的数据库(更新或删除现有文档)时,我必须将 _id 从字符串转换为 ObjectId 以定位我数据库中的文档... 所以在我的节点应用程序中,我必须用new ObjectId(stringId) 系统地按摩_id,因为浏览器发送的Id 是字符串......

显然我错过了一些东西。 我怎样才能让事情变得更优雅?

【问题讨论】:

  • new ObjectId(stringId) 没有任何问题。由于 JavaScript 中没有 ObjectId 类型,因此您需要使用 mongo 的 ObjectId 方法将其转换为一个。
  • ObjectId 不是 JSON 中支持的类型,因此(必要的)转换为 String
  • @Molda 提到这是正常的,我使用 spring-data mongo 驱动程序并将我的类 ID 映射为 String,因为在 java 中没有 ObjectId 数据类型,驱动程序完成大部分工作,仍然查询时写new ObjectId(id) 很烦人。也许司机没有我们希望的那么成熟。

标签: angularjs node.js mongodb express


【解决方案1】:

使用 ObjectId() 将字符串转换为 objectId 是正常的,因为当您将其传递给 Web 时,它会转换为 json 字符串,因此它不再是 objectId 但是当您使用服务器端文档中的 objectid 时在这种情况下,您无需将其转换为 objectid。

如果你的 _id 类型是字符串,你总是需要 objectId() 构造函数。

【讨论】:

    【解决方案2】:

    你为 mongodb 使用什么模块,我认为是 mongoose? 如果您使用的是 mongoose,则不必将 _id 转换为 ObjectId,只需使用字符串运行查询即可。

    db.collection.find({_id: "57e15b1009cb82cafafafd73"});
    

    【讨论】:

    • 我使用的是 mongodb 而不是 mongoose。
    • node应用中用什么连接mongodb?
    • 让 mongo = require('mongodb');
    • 我推荐你使用mongoose模块。但是如果你想使用这个mongodb那么你应该先阅读文档。
    【解决方案3】:

    感谢您的回复。

    所以在 MEAN 应用程序中将发生的一件显而易见的事情是,文档的 ObjectId 将被转换为字符串,因为它们作为 JSON 对象使用。 这将需要大量使用new ObjectId() 来记录前端中的对象,这些对象的 ID 由 Mongo 生成并返回到数据库中......

    除了使用 Mongoose 还有其他选择吗?除了有这个字符串转换问题之外,我现在很高兴使用标准节点 mongo 驱动程序......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-25
      • 2011-12-11
      • 2018-11-09
      • 1970-01-01
      • 2021-09-06
      • 2017-03-11
      • 1970-01-01
      • 2021-01-13
      相关资源
      最近更新 更多