Meteor React - 为什么在 miniMongo 中找不到单个文档上的 findOne?
Meteor React - Why is findOne on a single document not found in miniMongo when it does exist?
这真是个奇怪的问题。我认为这与我查询文档的方式有关。似乎 Meteor API 已更改为查询文档,但网站上的文档是相同的。
这是数据库中的一个文档:
meteor:PRIMARY> db.studies.findOne()
{ "_id" : ObjectId("56c12e6537014a66b16771e7"), "name" : "Study 1" }
我已订阅获取所有文档,这是我在控制台中尝试获取文档的方法。
var study = Studies.findOne() // This works.
It returns:
_id: MongoID.ObjectID
_str: "56c12e6537014a66b16771e7"
name: 'Study 1'
我刚刚用 React 开始了一个新的 Meteor 项目。我看到我的 collection 正在返回 _id: MongoId.ObjectId
这是不同的,我在 Blaze 中使用 Meteor 已经有一段时间了,我不记得它返回 MongoID.ObjectID
而不仅仅是字符串
但是现在,如果我尝试只找到一份文件,那是行不通的。
var study = Studies.findOne("56c12e6537014a66b16771e7");
or
var study = Studies.findOne({_id: "56c12e6537014a66b16771e7"});
我确定我正在排队等待正确的 _id
字段。我已经仔细检查了ID。为什么试图找到这个文件不起作用?
请告诉我如何查询文档。 Meteor 有什么变化吗?该文档仍然说您可以按 id 字符串搜索。
您需要将对象 ID 字符串显式转换为 ObjectID
var study = Studies.findOne({_id: new Meteor.Collection.ObjectID("56c12e6537014a66b16771e7")});
@Jaco 有正确答案,但我想在这里回答以澄清更高级别的问题。
我的查找查询不遵循 Meteor 文档中的语法的原因是因为我直接将文档插入 MongoDB,而不是通过 Meteor API。
如果直接将文档插入MongoDB,则必须使用@Jaco 在他的回答中提到的语法来查询文档。
类似问题:Meteor - Find a document from collection via Mongo ObjectId
因此,我没有更改查询代码,只是删除了直接插入 MongoDB 的文档,并使用浏览器中的控制台插入了一个文档。
现在我可以正常查询文档了。
所以问题的根源在于,如果您将文档直接插入 MongoDB,您得到的文档类型与使用 Meteor [=25] 插入文档时得到的文档类型不同=].
这真是个奇怪的问题。我认为这与我查询文档的方式有关。似乎 Meteor API 已更改为查询文档,但网站上的文档是相同的。
这是数据库中的一个文档:
meteor:PRIMARY> db.studies.findOne()
{ "_id" : ObjectId("56c12e6537014a66b16771e7"), "name" : "Study 1" }
我已订阅获取所有文档,这是我在控制台中尝试获取文档的方法。
var study = Studies.findOne() // This works.
It returns:
_id: MongoID.ObjectID
_str: "56c12e6537014a66b16771e7"
name: 'Study 1'
我刚刚用 React 开始了一个新的 Meteor 项目。我看到我的 collection 正在返回 _id: MongoId.ObjectId
这是不同的,我在 Blaze 中使用 Meteor 已经有一段时间了,我不记得它返回 MongoID.ObjectID
而不仅仅是字符串
但是现在,如果我尝试只找到一份文件,那是行不通的。
var study = Studies.findOne("56c12e6537014a66b16771e7");
or
var study = Studies.findOne({_id: "56c12e6537014a66b16771e7"});
我确定我正在排队等待正确的 _id
字段。我已经仔细检查了ID。为什么试图找到这个文件不起作用?
请告诉我如何查询文档。 Meteor 有什么变化吗?该文档仍然说您可以按 id 字符串搜索。
您需要将对象 ID 字符串显式转换为 ObjectID
var study = Studies.findOne({_id: new Meteor.Collection.ObjectID("56c12e6537014a66b16771e7")});
@Jaco 有正确答案,但我想在这里回答以澄清更高级别的问题。
我的查找查询不遵循 Meteor 文档中的语法的原因是因为我直接将文档插入 MongoDB,而不是通过 Meteor API。
如果直接将文档插入MongoDB,则必须使用@Jaco 在他的回答中提到的语法来查询文档。
类似问题:Meteor - Find a document from collection via Mongo ObjectId
因此,我没有更改查询代码,只是删除了直接插入 MongoDB 的文档,并使用浏览器中的控制台插入了一个文档。
现在我可以正常查询文档了。
所以问题的根源在于,如果您将文档直接插入 MongoDB,您得到的文档类型与使用 Meteor [=25] 插入文档时得到的文档类型不同=].