【问题标题】:Meteor - Handling insertion of duplicate _idMeteor - 处理重复 _id 的插入
【发布时间】:2013-10-09 03:29:45
【问题描述】:

我正在为我的应用程序添加标签支持,并计划为我的标签创建一个单独的集合并生成我自己的 _id 值。我的计划是从用户输入的标签中形成 _id(例如,用户输入“计算机科学”的 _id 为“计算机科学”)。我形成自己的 _id 的理由是 _id 强制唯一性,因此没有重复的插入会立即发生,而那些有重复的插入会产生可以处理的错误。如果这不是提高性能的好方法,请告诉我另一种方法。

假设以上是一个好方法......

是否建议在不检查是否已经存在具有相同 _id 的文档的情况下对集合执行插入操作 - 允许在重复的情况下发生重复错误?如果是这样,应该如何处理错误?在 collection.insert 回调函数中?

任何显示推荐模式的示例代码都会非常有帮助。

我猜在插入之前是否检查重复项的建议可能取决于随着时间的推移预期重复项的频率。

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    Meteor 自动为每个集合添加 _id 值,这些 _id 都是不同的。您不应该提供 _id 字段,它将自动添加。

    如果您想提供自己的自动增量 id 字段,可以使用 getNextSequence(),如 mongo documentation 中所述。

    编辑 创建不同的值应该不是问题,您应该能够:

    CollectionName._ensureIndex('tag-id', {unique: 1, sparse: 1});
    CollectionName.insert(data, function(err, id) {
      //err should contain any duplication errors.
    });
    

    或者,您可以创建一个 addTag 方法,在添加之前检查标签是否已经存在。

    【讨论】:

    • 我在确保唯一性方面没有任何问题,但更多的是关于在集合中不存在标签的所有情况下检查存在性的性能。即使在存在重复项时您可以处理错误,执行存在性检查是否是最佳实践?我编辑了我的问题以试图提供一些清晰度。
    • 如果有重复插入,collection.insert 应该抛出错误。 (我更新了我的答案,请参见示例。)您可以在插入回调中处理重复错误。在回调中处理重复错误应该比运行另一个查询来检查 id 的存在成本更低。
    猜你喜欢
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    • 2019-02-19
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多