Consider the following code
const mongoose = require('mongoose');
main().catch((err) => console.log(err));
const Model = mongoose.model('collection', new mongoose.Schema({ ... }));
async function main() {
const connection = await mongoose.connect(`mongodb://localhost:27017/DB`);
// Method 1
const doc1 = await Model.find({ key: 'value' });
console.log(doc1);
// Method 2
const doc2 = await Model.find().where('key').equals('value');
mongoose.connection.close();
console.log(doc1);
}
Model.find()
returns a <Query>
Object which is chainable.
Q1• What is a <Query>
Object. Is it a promise?
Q2• What is the difference between Method1 and Method2 ?
CodePudding user response:
Q1. The <Query>
Object, is not a promise. You should note, Model.find()
does not return a promise, it is not asynchronous and your wouldn't use await
. <Query>
is an instance of the Query class. It contains information about your query and has a number of functions available to it such as where()
and equals()
.
A full list of functions is available here: https://mongoosejs.com/docs/api.html#Query
It is the returned <Query>
Object which allows the chaining.
Q2. The main difference between these two methods is semantic. They both perform the same function. Method 1 allows you to pass the query parameters as an object. Method 2 performs the same action through function chaining.