需要使用Meteor从_id中删除ObjectID()

时间:2015-03-28 23:37:14

标签: mongodb meteor

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

ObjectID("54f27a1adfe0c11c824e04e9")

......我想要......

54f27a1adfe0c11c824e04e9

我该怎么做?

4 个答案:

答案 0 :(得分:11)

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

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

您也可以使用ES6语法执行此操作:

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

并在任何模板中使用它:

{{formatId _id}}

这适用于mongo风格的ObjectIds和流星风格的随机字符串。

答案 1 :(得分:1)

由于您的文档使用的是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而不是简单的文档ID,这是必要的。默认情况下由Meteor使用的随机生成的字符串。

如果您想了解更多关于如何设置MongoDB集合以使用随机生成的文档ID字符串并避免这些混乱的信息,请查看this

答案 2 :(得分:0)

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

您的记录使用的是默认的mongo格式,由" ObjectId"前缀。

尝试ObjectId("507f191e810c19729de860ea").str

答案 3 :(得分:0)

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