MongoDB stores JavaScript objects. Your query is already structured data — there is no "query string" to inject into. Which is exactly why NoSQL injection looks different from SQL injection, and why generic security linters miss it.
The attack isn't ; DROP TABLE users; --. It's this:
// POST body: { "username": "admin", "password": { "$ne": null } }
await db.collection("users").findOne({
username: req.body.username,






