Mongodb 如果添加子文档,则响应本机Meteor订阅中断

Mongodb 如果添加子文档,则响应本机Meteor订阅中断,mongodb,reactjs,meteor,react-native,ddp,Mongodb,Reactjs,Meteor,React Native,Ddp,概述(简化) 我正在运行Meteor服务器,其发布由ID参数化: Meteor.publish('documents.byId', function(documentId) { ... return Documents.find({documentId}); }); 文档集合(名称已更改)附带了一个simplescma。 此文档的架构包含一个字段,该字段是子文档的数组 Documents.schema = new SimpleSchema({ ... subdocuments:

概述(简化)

我正在运行Meteor服务器,其发布由ID参数化:

Meteor.publish('documents.byId', function(documentId) {
  ...
  return Documents.find({documentId});
});
文档
集合(名称已更改)附带了一个simplescma。 此文档的架构包含一个字段,该字段是子文档的数组

Documents.schema = new SimpleSchema({
  ...
  subdocuments: {
    label: 'Sub Documents',
    type: [SubDocumentSchema],
    defaultValue: [],
    optional: true
  }
  ...
});

Documents.attachSchema(Documents.schema);
然后,我在客户端有一个容器,使用订阅的通常方式:

...
var handle = Meteor.subscribe('documents.byId', documentId);
... 
var document = Meteor.collection('documents').findOne();
...    
问题描述

react native meteor
客户端上,只有在数组中没有子文档时,客户端才能正确接收订阅数据。一旦添加子文档,当我尝试从react native重新订阅时,列表将变为空。有趣的是,如果我已经订阅了,它仍然会注意到文档的更改,但一旦我重新加载应用程序,它就再也找不到了

在服务器上,我检查了是否通过日志记录找到了文档,但在客户端上,当我执行
Meteor.collections('documents').findOne()
时,除非子文档字段为空,否则它是空的

在meteor服务器的web客户端上,如果我按ID订阅文档,则无论有多少子文档,一切都很好

问题

我怀疑这可能是某种简单的打字错误,或者是
react native meteor
本身的问题。其他人能重现这个吗?我已经在这上面停留了一段时间——我唯一的猜测是,可能本地版本对模式不满意

[编辑]版本

React本机版本:0.39.2

流星版本:1.4.2.3

[更新]

当我四处搜索并通过react meteor native查看它在做什么时,我发现有一次数据真的回来了!所以这可能是某种时间问题

[更新2]

如果在服务器端筛选出子文档数组,则本机客户端将再次开始工作:

return Documents.find({documentId}, {
  fields: {'subdocuments': 0}
}
也许,
react native meteor
不喜欢subdoc格式/模式

[更新3]


我实验性地从子文档数组中删除了“id”字段,现在一切正常。因此,在子文档数组中有一个类型为
Meteor.Collection.ObjectID
的字段是一个问题…

经过多次实验,我发现
react native Meteor
由于我填充子文档的
\u id
字段的方式不当

最初,我将ID设置为:

var _id = new Meteor.Collection.ObjectID();
但当我意识到这会导致问题时,我使用了字符串版本:

var _id = new Meteor.Collection.ObjectID().valueOf();

现在本机客户端正在运行。我不确定这是否算是一个解决办法,或者我一开始是否做错了什么。。。我的模式中的字段的类型设置为
type:Meteor.Collection.ObjectID
,但它似乎对字符串和对象都很满意

反应本机版本?当然!抱歉,它是0.39.2,我的Meteor版本是1.4.2.3您的listview无法呈现子文档?为了好玩,您是否尝试过在主方案的子文档字段中注释默认值?作为一个测试。谢谢@zim,这是一个合理的建议,因此我已经尝试过了,但最终还是解决了这个问题(见我发布的答案)。无论如何,谢谢你抽出时间!