I’m building a Node.JS app, and i have a function that returns all the records if none of the queries were sent and, if sent, it returns all the records satisfying my query. Here’s my code:
const express = require('express'); const mongodb = require('mongodb'); const router = express.Router(); router.get('/', async (req, res) => { const items = await loadItemsCollection(); const params = req.query; if (Object.keys(params).length != 0) { console.log(params); res.send(await items.find(params).toArray()); } else res.send(await items.find({}).toArray()); }); async function loadItemsCollection() { const client = await mongodb.MongoClient.connect('mongodb+srv://mynickname:mypassword@voda-delivery.oefbx.mongodb.net/voda-delivery?retryWrites=true&w=majority', { useNewUrlParser: true }); return client.db('voda-delivery').collection('items'); } module.exports = router;
Why i got an empty array returned when my param is { _id: ‘5f0218093e6f27870a6d5db2’ }? When I’m querying other properties e.g. { name: ‘1l water’ } it works as needed. console logs an id, all the records
Advertisement
Answer
You need to convert the ID from string to ObjectID:
const ObjectID = require("mongodb").ObjectID;
...
await items.find({ _id: ObjectID('5f0218093e6f27870a6d5db2') }).toArray()