I am trying to combine two queries in Mongoose into one.
Right now, I'm doing this:
User.find({ _id: req.body.userId }, (err, user) => {
User.find({ username: decodedUser.username }, (err, member) => {
console.log("user\n", user)
console.log("member\n", member)
})
})
I'd like to make a single User.find()
query to the database, and the result be an object (or an array) of all the documents that I want, such as an array of [user, member]
in this case. This will save me from having to run User.find()
twice. Ideally, I'd like the result from the query to be an object so that I can find a specific key/value set more easily, as opposed to an array that I would have to iterate through to find a particular element. How do I do this?
Note: this works:
User.find({ $or:
[
{ _id: req.body.userId },
{ username: decodedUser.username}
]}, (err, results) => {
console.log("results\n", results)
})
where results
is an array of the documents that I want. But, I'd like to know if there is a better way.
If you are expecting only one result by both of your conditions then you could use User.findOne
- it will return the first found result.
User.findOne({ $or:
[
{ _id: req.body.userId },
{ username: decodedUser.username}
]}, (err, user) => {
console.log("user\n", user)
})
Edit
Since you said that you need to get 2 results and you want to have then in the result you can also run 2 queries in parallel and use promises to get the result. E.g.
Promise.all([
User.find({ _id: req.body.userId }),
User.find({ username: decodedUser.username})
]).then( ([ user, member ]) => {
console.log( util.format( "user=%O member=%O", user, member ) );
});
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