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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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
为什么一个Meteor客户端集合的行为与MongoDB中显示的不同?_Mongodb_Meteor - Fatal编程技术网

为什么一个Meteor客户端集合的行为与MongoDB中显示的不同?

为什么一个Meteor客户端集合的行为与MongoDB中显示的不同?,mongodb,meteor,Mongodb,Meteor,我一直很高兴通过客户端控制台插入收集文档,并在我的应用程序和命令行MongoDB客户端中浏览这些文档,没有任何问题。。。直到今天,当我通过MongoDB shell用一些新字段修改我的一个集合时,现在我得到了非常奇怪的行为 以下是命令行MongoDB中的一些结果: meteor:PRIMARY> db.pieceSizes.find() { "_id" : "LzZxiwj2i32E9EGnm", "name" : "3C", "length" : 39, "width" : 25.5,

我一直很高兴通过客户端控制台插入收集文档,并在我的应用程序和命令行MongoDB客户端中浏览这些文档,没有任何问题。。。直到今天,当我通过MongoDB shell用一些新字段修改我的一个集合时,现在我得到了非常奇怪的行为

以下是命令行MongoDB中的一些结果:

meteor:PRIMARY> db.pieceSizes.find()
{ "_id" : "LzZxiwj2i32E9EGnm", "name" : "3C", "length" : 39, "width" : 25.5, "countedSF" : 7 }
{ "_id" : "AePXzKFgB7M8Ewnf2", "name" : "4C", "length" : 51, "width" : 25.5, "countedSF" : 9 }
然而,当我看到客户机时,我基本上看到了空白文档;当我在JavaScript控制台中运行此命令时:

PieceSizes.find()
。。。然后我展开LocalCollection,我只看到_id,例如:

Object {_id: "LzZxiwj2i32E9EGnm"}
我对芬顿也有同样的结果。为什么在我修改shell中的内容之后,客户端就看不到所有数据了

我正在查找正确的数据库,因为我可以编辑其他集合,并在两端正确查看数据更改

我想有一个完整的解释,但我会满足于简单地让我的应用程序与工作数据再次

更新:我看到有一个流星更新,所以我运行它更新到0.7.0.1,现在它变得更奇怪。如果我对该文档执行findOne,则会得到以下对象:

Object {0: undefined, 1: undefined, 2: undefined, 3: undefined, 4: undefined, 5: undefined, 6: undefined, 7: undefined, 8: undefined, 9: undefined, 10: undefined, 11: undefined, 12: undefined, 13: undefined, 14: undefined, 15: undefined, 16: undefined, 17: undefined, 18: undefined, 19: undefined, 20: undefined, 21: undefined, 22: undefined, 23: undefined, 24: undefined, 25: undefined, 26: undefined, 27: undefined, 28: undefined, 29: undefined, 30: undefined, 31: undefined, 32: undefined, 33: undefined, 34: undefined, 35: undefined, 36: undefined, 37: undefined, 38: undefined, _id: "LzZxiwj2i32E9EGnm"}
没错,它的key _id和前面一样具有预期的值,但现在也有0-38键具有未定义的值。但是MongoDB客户端仍然显示我想要的所有数据,并且没有编号的密钥

因此,我想我会再次尝试在客户端删除和插入数据,但在执行插入时:

PieceSizes.insert({name:"1C", length:88, width:18, countedSF:10})
"YkgoAJehkyZmDbe7G"
。。。我最终得到的输出看起来像一个ID YkgoAJehkyZmDbe7G,但没有定义具有该ID的文档,即findOne不会将其向上拉,而find将在其结果中显示一个没有类似于此ID的游标。但是,我可以在浏览器控制台和命令行shell上看到一个新文档,它只有一个ID:

{ "_id" : ObjectId("52b7d0d81f4f910000000001") }
请注意,它完全删除了我的所有其他信息。除此之外,它的ID与常规的Meteor约定不匹配,也就是说,它创建了典型的Mongo ObjectId。我想我可以使用ObjectId,但如果客户机不保存我的任何数据,也不从数据库中读取任何额外数据,我就无法工作


我想下一步是尝试导出/导入/重新安装数据和工具。欢迎任何解决方法

有几件事

当Meteor插入文档时,它将使用字符串类型_id,如LzZxiwj2i32E9EGnm。从mongo插入时,它通常是ObjectID对象,如ObjectD52B7D0D81F4F910000000001

如果需要,可以在meteor中通过将收藏的idGeneration选项设置为MONGO来完成此操作,例如:

 PieceSize = new Meteor.Collection('pieceSizes', { idGeneration : 'MONGO' });
在Meteor中作为字符串执行此操作的原因是,您可以轻松地在URL中使用字符串并将其映射到特定ID。使用ObjectID有点棘手,因为您必须将它们来回转换为字符串

之所以看起来只有_id字段,是因为在发布过程中设置了字段选项,但没有设置。您可以通过添加回自动发布来测试这种情况

 `meteor add autopublish`

有几件事会导致你的行为:

未正确发布 如果它在此之后工作,则意味着您的发布规则没有正确设置字段,或者您没有在转换中正确返回文档,这可能是

你需要这样的东西

 Meteor.publish("pieces", function() {
     return PiecesSize.find({}, fields: { name: true, length: true, countedSF: true });
 });
以便发布这些特定字段。在此之后,您可以禁用自动发布

如果未正确设置字段,则只能获得_id字段

不返回变换 如果是这样的转换,甚至使用集合

Docs.find({}. {transform: function(doc) {
    doc.value2
    return doc
});
如果没有,请不要忘记在转换结束时使用return,您还可以得到just _id的字段作为结果


如果您认为这些都不是问题,那么可能是数据库损坏或其他问题。您可以使用meteor reset重新启动数据库。

我找到了它:在对象中使用“长度”属性将严重破坏与数据库的通信

“长度”字段似乎存在已知问题:

以下是症状

通过客户端代码插入,例如浏览器的JavaScript控制台

命令:PieceSizes.insert{name:1C,长度:88,宽度:18,countedSF:10}

预期返回值:一个键,例如YkgoAJehkyZmDbe7G,但该键未与对象一起存储在任何位置,因此无法使用

Mongo shell中显示的存储信息意外:具有单个_id字段的对象,例如{u id:ObjectId52b7d0d81f4f910000000001}

在浏览器客户端中看到的存储信息意外:具有单个_id字段的对象,例如{u id:ObjectId52b7d0d81f4f910000000001}

通过服务器上的Mongo shell插入

命令:db.pieceSizes.insert{name:1C,长度:88,宽度:18,countedSF:10}

预期返回值:无

Mongo shell中显示的存储信息应为:具有生成的_id的对象,例如{u id:Objectd52B85C2D42C8A8DC81BF0331,名称:1C,长度:88,宽度:18,计数SF:10}


在浏览器客户端中看到的存储信息意外:具有一个_id键和88个名为0到87的键的对象;它们都有一个未定义的值。请注意,有一种情况下_id是ObjectId,在我的情况下可能是由meteor升级引起的。

感谢您的完整解释!然而,我发现我的问题的一部分是长度属性:在客户机中使用它将提升插入的工作方式。我会在另一个答案中解释更多。我不明白,有解决这个问题的方法吗?我的意思是,我们应该怎么做才能使浏览器mongo与服务器mongo同步?我不明白,有解决这个问题的方法吗?我的意思是,我们应该怎么做才能使浏览器mongo与服务器mongo同步?我不明白,有解决这个问题的方法吗?我的意思是,我们应该怎么做才能使浏览器mongo与服务器mongo保持同步?