Mongodb 需要使用Meteor从_id中删除ObjectID()
我正在使用Meteor从Mongo检索记录。我在meteor模板中使用{{u id}}占位符来使用记录的{u id字段,但它会将其添加到我的模板中Mongodb 需要使用Meteor从_id中删除ObjectID(),mongodb,meteor,Mongodb,Meteor,我正在使用Meteor从Mongo检索记录。我在meteor模板中使用{{u id}}占位符来使用记录的{u id字段,但它会将其添加到我的模板中 ObjectID("54f27a1adfe0c11c824e04e9") 。。。我只想 54f27a1adfe0c11c824e04e9 如何做到这一点?mongo能够存储多种类型,包括UUID和自定义类型。字段通常是自描述对象,由类型和id组成 您的记录使用默认的mongo格式,由“ObjectId”前缀证明 请尝试ObjectId(“507f
ObjectID("54f27a1adfe0c11c824e04e9")
。。。我只想
54f27a1adfe0c11c824e04e9
如何做到这一点?mongo能够存储多种类型,包括UUID和自定义类型。字段通常是自描述对象,由类型和id组成 您的记录使用默认的mongo格式,由“ObjectId”前缀证明
请尝试
ObjectId(“507f191e810c19729de860ea”).str
由于您的文档使用的是MongoDB ID格式,而不是默认的Meteor ID格式(只是一个随机生成的字符串),因此您需要使用所描述的MongoDBObjectId.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(如{{{u ID}}
)要麻烦得多,但这是必要的,因为您的文档具有MongoDB ObjectID类型文档ID,而不是Meteor默认使用的简单随机生成的字符串
如果您想了解有关如何将MongoDB集合设置为使用随机生成的字符串作为文档ID并避免这种混乱的更多信息,请查看。只需添加一个全局帮助器:
Template.registerHelper('formatId',函数(数据){
返回(数据和数据)| |数据;
});
您也可以使用ES6语法这样做:
Template.registerHelper('formatId',(id)=>(id&&id.| str)| id);
并在以下任何模板中使用它:
{{formatId _id}}
这将适用于mongo样式的ObjectId和meteor样式的随机字符串。在Blaze模板中,只需添加此
{{{u id.valueOf}
,您将获得实际对象id的字符串值。一旦在我的应用程序中开始生成记录,是否可以在“idGeneration”方法之间切换?另外,哪种方法是最好的-STRING还是MONGO?在创建集合后,似乎不可能切换ID生成方案。这很可能是Meteor所期望的行为,因为您总是希望与为给定集合中的文档生成ID的方式保持一致。至于哪种方法最好,我认为它们在质量上可能都差不多。Meteor包生成的随机字符串可能更好,因为它使用更大的字符集来创建字符串,而MongoDB ID只是十六进制字符串。