Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 需要使用Meteor从_id中删除ObjectID()_Mongodb_Meteor - Fatal编程技术网

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

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

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

ObjectID("54f27a1adfe0c11c824e04e9")
。。。我只想

54f27a1adfe0c11c824e04e9

如何做到这一点?

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

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


请尝试
ObjectId(“507f191e810c19729de860ea”).str

由于您的文档使用的是MongoDB ID格式,而不是默认的Meteor ID格式(只是一个随机生成的字符串),因此您需要使用所描述的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(如
{{{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只是十六进制字符串。