我正在使用Meteor从Mongo检索记录。我在流星模板中使用{{_id}}占位符来使用记录的_id字段,但它会将其添加到我的模板中....
ObjectID("54f27a1adfe0c11c824e04e9")
......我想要......
54f27a1adfe0c11c824e04e9
我该怎么做?
答案 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的字符串值。