find by _id with Mongoose

Because this query finds the doc in the shell:

db.getCollection('stories').find({_id:'572f16439c0d3ffe0bc084a4'})

That means that the type of _id in the document is actually a string, not an ObjectId like Mongoose is expecting.

To find that doc using Mongoose, you'd have to define _id in the schema for Story as:

_id: { type: String }

If your Mongo schema is configured to use Object Id, you query in nodeJS using

models.Foo.findById(id)

where Foo is your model and id is your id. here's a working example

router.get('/:id', function(req, res, next) {
    var id = req.params.id
    models.Foo.findById(id)        
        .lean().exec(function (err, results) {
        if (err) return console.error(err)
        try {
            console.log(results)            
        } catch (error) {
            console.log("errror getting results")
            console.log(error)
        } 
    })
})

In Mongo DB your query would be

{_id:ObjectId('5c09fb04ff03a672a26fb23a')}

One solution is to use mongoose.ObjectId()

const Model = require('./model')
const mongoose = require('mongoose')

Model.find({ id: mongoose.ObjectId(userID) })

It works, but it is weird because we are using id instead of _id