I am trying to find a record in my mongo db by its id
No matter I use findbyid(), findone(id,...), it return null
here is my code. what is the solution?
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/Movie', {useNewUrlParser: true})
.then(() => console.log('Connected to Databse'))
.catch(err => console.err('Could not connect to MongoDB', err));
var ObjectId = require('mongodb').ObjectID;
const Schema = new mongoose.Schema({
name: String,
author: String,
tags: [String],
date: Date,
isPublished: Boolean,
price: Number
});
const Data = mongoose.model('Datas', Schema);
async function updateData(id){
const result = await Data.findById(id);
console.log(result);
}
updateData('5a6900fff467be65019a9001');
Return value findById returns the document where the _id field matches the specified id . If the document is not found, the function returns null .
std::find. Returns an iterator to the first element in the range [first,last) that compares equal to val . If no such element is found, the function returns last .
Mongoose | findById() Function The findById() function is used to find a single document by its _id field. The _id field is cast based on the Schema before sending the command. Installation of mongoose module: You can visit the link Install mongoose module. You can install this package by using this command.
findById() function is used to find one document by its _id . The findById() function takes in a single parameter, the document id. It returns a promise that resolves to the Mongoose document if MongoDB found a document with the given id , or null if no document was found.
I had the same problem. The _id in my DB collection was a String
. After I enabled mongoose debug require('mongoose').set('debug', true)
, I found out that the mongoose query id
as ObjectId("yourId")
unless we define _id
in the Schema. In order to solve the problem I had to add _id:String
in to mongoose schema.
const MyDataSchema = new Schema({
_id: String,
...
...
}
Check your mongodb database, if _id
is storaged as String, findById(id)
can not found id
. FindById(id)
only finds ObjectId('yourId')
.
You might import database by using mongoimport and including _id
in JSON, it's wrong, delete _id
in imported JSON.
I was also facing the same issue. Then I referred to this solution Make sure the documents in the collection have _id as an Object rather than a String. If you have imported the database entries using a JSON file, just remove all the _id fields and then import it.
After importing, MongoDB will itself assign the _id values to all the entries.
There is a simple solution to this:
Replace
const result = await Data.findById(id);
with
const result = await Data.findById(id).exec();
See Mongoose - What does the exec function do? for an explanation on what exec()
does
After hour of searching i needed to add _id to Schema like this:
_id: { type: Schema.Types.ObjectId },
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With