流星收集奇怪的行为。

时间:2015-04-12 17:37:34

标签: meteor

我的收集“配置”如下。

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

1 个答案:

答案 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字段当前是随机的并且没有类似时间戳的属性的原因。

相关问题