Search code examples
mongodbmeteorminimongo

Meteor React - Why is findOne on a single document not found in miniMongo when it does exist?


This is such a weird problem. I think it has to do with how I am querying the document. It seems like the Meteor API has changed to query documents but the docs on the website are the same.

Here is a document in the database:

meteor:PRIMARY> db.studies.findOne()
{ "_id" : ObjectId("56c12e6537014a66b16771e7"), "name" : "Study 1" }

I have subscribed to get all documents and here is what I am trying in the console to get the documents.

var study = Studies.findOne() // This works. 

It returns:

  _id: MongoID.ObjectID
    _str: "56c12e6537014a66b16771e7"
  name: 'Study 1'

I just started a new Meteor project with React. I see that my collection is returning _id: MongoId.ObjectId

This is different, I have been using Meteor for awhile with Blaze and I can't remember it returning MongoID.ObjectID instead of just the string

But now if I try and find just that one document, it does not work.

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

or

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

I am positive I am queuing for the right _id field. I have double checked the ID. Why does trying to find this one document not work?

Please let me know how I can query for a document. Has something changed with Meteor? The documentation still says you can search by id string.


Solution

  • @Jaco has the correct answer, but I wanted to answer here to clarify what the higher level issue was.

    The reason why my find query was not following syntax in Meteor docs is because I inserted the document into MongoDB directly, instead of through the Meteor API.

    If you insert the document directly into MongoDB, you have to query the document using the syntax @Jaco mentioned in his answer.

    Similar question: Meteor - Find a document from collection via Mongo ObjectId

    So instead of changing my query code, I just deleted the document I inserted directly into MongoDB, and inserted a documented using the console in the browser.

    Now I can query the document like normal.

    So the root of the issue is that if you insert the document directly into MongoDB, you don't get the same type of document as you would if you insert the document using the Meteor API.