【问题标题】:MongoDb integrating with external dbMongoDb 与外部数据库集成
【发布时间】:2017-12-04 21:36:23
【问题描述】:

我有一个数据库,其中包含来自两个独立系统/服务器的数据。第一个是在本地生成的[我开发并创建了这些数据](用户、活动日志、订单……)。第二个来自“产品提供商”[我只能从 API 读取访问权限] 这些对象由 MySQL 创建并以 JSON 格式发送。他们已经有一个“id”属性。

使用 NodeJS,我使用 request 通过“id”获取产品,然后使用 newProduct.save() 附加 _id 存储它。

在产品中,“id”是与我的数据库中的其他集合(例如 products_price)建立关系的必要条件,并访问动态端点,例如“products/:id/promos”。

请注意,产品不断在外部更新,我需要能够通过“id”而不是“_id”更新我的文档,因为外部服务器不知道“_id”。 [id 在集合级别上是唯一的,因为每个集合都是新的迭代]

对于我的第一个问题:我应该将“product.id”视为“常规”MongoDB 字段并使用聚合/查找来合并我的集合中的文档吗?或者我应该用 id 覆盖 ObjectID() 吗? (保存之前将“id”重命名为“_id”)

在某些时候,Orders(本地)和 Products(外部)需要形成一种关系,其中 Order_id 和 Product id(或 _id)存储在一起以便于检索。

在这种情况下我使用哪个 id?

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    如果您非常确定来自您的产品提供商 API 的“id”是唯一的,您最好将其用作 _id(覆盖 _id),它将为您节省:

    • 不需要的索引(“_id”以任何方式编入索引)
    • mongoDB 生成 ObjectID 所需的一些 CPU 周期
    • 一些磁盘和内存空间

    (*) 即使您发现自己与许多不同的产品提供商打交道,假设其中一个使用他自己的唯一产品 ID,您也可以使用组合的 _id 使其唯一:

    • _id = {provider: 'foo', id: xxx}
    • 或 _id = [provider_name, product_id]
    • 或 _id = provider_name + product_id 等等等等。

      在这种多供应商格式的用例中,取决于您计划以后如何获取这些产品。

    【讨论】:

    • 感谢您的洞察力。感谢您对 _id 感兴趣的用例
    猜你喜欢
    • 2017-01-11
    • 2013-07-16
    • 2012-12-05
    • 2016-09-30
    • 1970-01-01
    • 2014-02-08
    • 2019-05-07
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多