当使用mini-mongo将文档插入集合时,用户可以传递_id字段,只要它是字符串或ObjectID(并且不与现有ID冲突),就会在文档上设置_id。这对我来说似乎不合理。我希望服务器始终生成文档的_id,所以我最终不会得到一个db,其中两个字符串(可能具有不同长度)和ObjectID存在为_ids。
有没有简单的方法来实现这一目标?现在我能想到的最好的方法是在拒绝规则中检查id(其中_id将已经由Meteor设置或者是用户提供的值),如果它不是我希望它的类型/长度,我改变它,但这也需要检查,以避免重复的ID。不是太难,但对于像这样基本的东西来说似乎过于复杂。
答案 0 :(得分:0)
回顾我的回答,这是你的回答:
拒绝所有插页。创建method
,collectionInsert(document)
,检查是否指定了_id
字段。
Meteor.methods({
collectionInsert: function(document) {
if (document && document._id) {
delete document._id;
}
// Returns the _id generated
return collection.insert(document);
}
});
在今天的meteor版本(0.8及更高版本)中,无论如何,服务器和客户端在这种情况下生成相同的_id
。但是使用此方法应确保客户端模拟字段插入,并确保生成的_id
的服务器版本具有权威性。
答案 1 :(得分:0)
执行此操作的正确方法可能是在Meteor.method
中插入。您无法在高风险应用程序中信任客户端生成的ID,因此使用collection#insert
/ allow
挂钩的deny
是不够的。相反,调用方法来执行插入操作,这将始终创建服务器生成的ID。
您仍然可以在客户端上存储此方法以进行延迟补偿,但在服务器调用返回时将覆盖插入的ID。