我有一个数据库,其中包含来自两个独立系统/服务器的数据。第一个是在本地生成的[我开发并创建此数据](用户、事件日志、订单等)。第二个来自“产品提供商”[我只有 API 的读取权限]这些对象由 MySQL 创建并以 JSON 形式发送。他们已经有一个“id”属性。
使用 NodeJS,我使用请求通过“id”获取产品,然后使用 newProduct.save()
附加一个 _id
来存储它。
在产品中,“id”对于与我的数据库中的其他集合(例如 products_price)建立关系以及访问动态端点(例如“products/:id/promos”)是必要的。
请注意,产品不断在外部更新,我需要能够通过“id”而不是“_id”更新我的文档,因为外部服务器不知道“_id”。 [id 在集合级别上是唯一的,因为每个集合都是新的迭代]
对于我的第一个问题:我应该将“product.id”视为“常规”MongoDB 字段并使用聚合/查找来合并集合中的文档吗?或者我应该用 id 覆盖 ObjectID() ? (保存之前将“id”重命名为“_id”)
在某些时候,订单(本地)和产品(外部)需要形成一种关系,其中订单 _id 和产品 id(或 _id)存储在一起以便于检索。
在这种情况下我应该使用哪个 ID?
最佳答案
如果您非常确定来自产品提供商 API 的“id”唯一,您最好将其用作 _id(覆盖 _id),这样可以节省您的时间:
- 不需要的索引(“_id”以任何方式编入索引)
- mongoDB 生成 ObjectID 所需的一些 CPU 周期
- 一些磁盘和内存空间
(*) 即使您发现自己与许多不同的产品提供商打交道,假设其中一个使用自己唯一的产品 ID,您也可以使用组合的 _id 使其唯一,如下所示:
- _id = {provider: 'foo', id: xxx}
- 或 _id = [提供商名称、产品 ID]
或 _id = 提供商名称 + 产品 ID 等等等等
在这种多个提供商的用例中,格式取决于您稍后计划如何获取这些产品。
关于node.js - MongoDb 与外部数据库集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44854701/