我的收集“配置”如下。
Config= new Mongo.Collection("config");
配置集合包含将从后端加载到DB的配置数据,永远不会被Meteor编辑。
以下是config中的示例数据:
{
_id: 0,
name: "S"
}
{
_id: 1,
name: "M"
}
{
_id: 2,
name: "L"
}
注意:_id是整数。
以下代码在服务器上运行,结果不稳定。
Config.findOne(0); //result is undefined
Config.findOne({_id: 0}); //result is undefined
Config.findOne(1); //result is { _id: 1,Name:"M"}
Config.findOne({_id: 1}); //result is { _id: 1,Name:"M"}
以下代码在浏览器中运行,结果再次不稳定。
Config.findOne(0); //result is { _id: 0,Name:"S"}
Config.findOne({_id: 0}); //result is undefined
Config.findOne(1); //result is { _id: 1,Name:"M"}
Config.findOne({_id: 1}); //result is { _id: 1,Name:"M"}
为什么当_id为0
时,findOne的行为会有所不同注意:Windows 8.1上的Meteor版本1.1.0.2
答案 0 :(得分:1)
文档中没有提到它,但Meteor会忽略id为false值的文档,例如0
。
这是因为它有问题,因为_id
用作通过DDP传输数据时识别文档的参考。
没有解决方法。请尝试在_id
处开始1
字段。
建议使用随机生成的_id。原因是您的客户端可能具有插入操作,这些插入操作在发送和插入之间可能存在延迟。
结果是_id
s不一定与它们创建的顺序相匹配。例外情况是它们是完全创建的,只在服务器上创建。
Meteor还会阻止插入带有假_id
的文档(请参阅https://github.com/meteor/meteor/blob/devel/packages/mongo/collection.js#L322-L325)。但是,如果您从mongo插入文档,这将无济于事。
这就是_id
字段当前是随机的并且没有类似时间戳的属性的原因。