【问题标题】:Need to remove ObjectID() from _id using Meteor需要使用 Meteor 从 _id 中删除 ObjectID()
【发布时间】:2015-03-28 23:37:14
【问题描述】:

我正在使用 Meteor 从 Mongo 检索记录。我在我的流星模板中使用 {{_id}} 占位符来使用记录的 _id 字段,但它会将它添加到我的模板中......

ObjectID("54f27a1adfe0c11c824e04e9")

...我只想拥有...

54f27a1adfe0c11c824e04e9

我该怎么做?

【问题讨论】:

    标签: mongodb meteor


    【解决方案1】:

    只需添加一个全局帮助器:

    Template.registerHelper('formatId', function(data) {
      return (data && data._str) || data;
    });
    

    你也可以使用 ES6 语法来做到这一点:

    Template.registerHelper('formatId', (id) => (id && id._str) || id);
    

    并在任何模板中使用它:

    {{formatId _id}}
    

    这适用于 mongo 样式的 ObjectId 和流星样式的随机字符串。

    【讨论】:

      【解决方案2】:

      由于您的文档使用的是 MongoDB ID 格式而不是默认的 Meteor ID 格式(只是一个随机生成的字符串),因此您需要使用 here 中描述的 MongoDB ObjectId.toString() 函数。但不幸的是,这只会导致您的 ObjectID 被打印为像 ObjectID("54f27a1adfe0c11c824e04e9") 这样的字符串。

      我建议创建一个文档 ID 模板帮助程序,用于在将文档 ID 包含在模板中之前对其进行清理。由于此问题很可能与您所有集合中的所有文档有关,因此我会进一步建议创建一个全局模板助手。可以这样做:

      Template.registerHelper('cleanDocumentID', function(objectID) {
          var objectIdString = objectID.toString();
          var cleanedString = objectIDString.slice(objectIDString.indexOf('"') + 1, -2);
      
          return cleanedString;
      });
      

      此模板助手从ObjectId.toString() 函数提供的字符串中仅切出实际的对象ID 字符串。您可以像这样在模板中使用此模板助手:

      {{cleanDocumentID _id}}
      

      我知道这比在模板中简单地使用文档 ID(如 {{_id}})要麻烦得多,但这是必要的,因为您的文档具有 MongoDB ObjectID 类型的文档 ID,而不是简单的随机生成Meteor 默认使用的字符串。

      如果您想详细了解如何将 MongoDB 集合设置为使用随机生成的字符串作为文档 ID 并避免这种混乱,请查看 this

      【讨论】:

      • 在我的应用程序中开始生成记录后,是否可以在“idGeneration”方法之间切换?另外,哪种方法最好 - STRING 还是 MONGO?
      • 创建集合后似乎无法切换 ID 生成方案。这很可能是 Meteor 所期望的行为,因为您总是希望与为给定集合中的文档生成 ID 的方式保持一致。至于哪种方法最好,我认为它们在质量方面可能都差不多。生成的 Meteor 包随机字符串可能会更好,因为它使用更大的字符集来创建字符串,而 MongoDB ID 只是十六进制字符串。
      【解决方案3】:

      在 Blaze 模板中,只需添加此 {{_id.valueOf}},您将获得实际 Object Id 的字符串值。

      【讨论】:

        【解决方案4】:

        mongo 能够存储多种类型,包括 uuid 和自定义类型。该字段通常是一个自描述对象,由类型和 id 组成。

        您的记录使用的是由“ObjectId”前缀证明的默认 mongo 格式。

        试试ObjectId("507f191e810c19729de860ea").str

        【讨论】:

          猜你喜欢
          • 2023-03-29
          • 2018-01-22
          • 2013-07-28
          • 1970-01-01
          • 1970-01-01
          • 2013-02-18
          • 2017-09-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多