1

这是一个很奇怪的问题。我认为这与我查询文档的方式有关。似乎 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 项目。我看到我的收藏品正在回归_id: MongoId.ObjectId

这是不同的,我在 Blaze 中使用 Meteor 已经有一段时间了,我不记得它返回MongoID.ObjectID而不是字符串

但是现在,如果我尝试只找到那个文件,它就不起作用了。

var study = Studies.findOne("56c12e6537014a66b16771e7"); 

or

var study = Studies.findOne({_id: "56c12e6537014a66b16771e7"});

我很肯定我正在为正确的_id领域排队。我已经仔细检查了身份证。为什么试图找到这个文件不起作用?

请让我知道如何查询文档。Meteor 有什么变化吗?文档仍然说您可以按 id 字符串搜索。

4

2 回答 2

4

您需要将对象 id 字符串显式转换为ObjectID

var study = Studies.findOne({_id: new Meteor.Collection.ObjectID("56c12e6537014a66b16771e7")}); 
于 2016-02-15T18:22:04.703 回答
1

@Jaco 有正确的答案,但我想在这里回答以澄清更高级别的问题。

我的 find 查询不遵循 Meteor 文档中的语法的原因是因为我直接将文档插入 MongoDB,而不是通过 Meteor API。

如果将文档直接插入 MongoDB,则必须使用他的回答中提到的 @Jaco 语法来查询文档。

类似的问题:Meteor - Find a document from collection via Mongo ObjectId

因此,我没有更改我的查询代码,而是删除了我直接插入 MongoDB 的文档,并使用浏览器中的控制台插入了一个文档。

现在我可以像往常一样查询文档了。

所以问题的根源在于,如果将文档直接插入 MongoDB,则不会获得与使用 Meteor API 插入文档时相同类型的文档。

于 2016-02-15T18:30:31.913 回答