NestJs MongoDB : Execute Raw Queries


Raw MongoDB queries वो queries होती हैं जो direct MongoDB के native query language में लिखी जाती हैं, बिना किसी ORM (जैसे Mongoose) के abstraction के। यह queries MongoDB Node.js driver के साथ execute होती हैं, और आपको complete control देती हैं कि आप database से कैसे interact करते हैं।

Raw queries का use करना useful होता है जब -

  • आपको complex aggregations लिखनी हों।

  • आपको ORM कि performance bottlenecks से बचना हो।

  • आपको fine-grained control चाहिए over MongoDB operations.

When to use Raw Queries ?

आप raw queries का use तब कर सकते हैं जब -

  • ORM के through आपकी query inefficient हो रही हो।

  • आपको native MongoDB features का use करना हो जो ORM support नहीं करता।

  • आपको queries को fine-tune करना हो performance के लिए।

NestJs Execute Raw Mongo Query

NestJS में Mongoose का use करते हुए भी आप MongoDB driver के native methods को access कर सकते हैं। आप Mongoose connection से db.collection() method के through raw queries को run कर सकते हैं।

File : src/user/user.service.ts

import { Injectable } from '@nestjs/common'; import { InjectConnection } from '@nestjs/mongoose'; import { Connection } from 'mongoose'; @Injectable() export class UserService { constructor(@InjectConnection() private readonly connection: Connection) {} // Raw query to find users async findUsersRaw(): Promise<any> { const users = await this.connection.db.collection('users').find({}).toArray(); return users; } }

यहां

  • this.connection.db.collection('users') का use करके हम direct MongoDB के users collection को access कर रहे हैं।

  • find() का use करके हम MongoDB के native find method के through raw query run कर रहे हैं।

NestJs MongoDB find()

MongoDB में find queries का use कर के आप records को retrieve कर सकते हैं। Mongoose के bypass करके direct MongoDB queries लिखना useful होता है जब आपको query के fine-tuned control कि need हो।

File : src/user/user.service.ts

// Find users with raw query async findUsersWithFilterRaw(age: number): Promise<any> { const users = await this.connection.db.collection('users').find({ age: { $gte: age } }).toArray(); return users; }

यहां

  • find({ age: { $gte: age } }) का use करके हम raw query लिख रहे हैं जिसमे age greater than or equal तो condition लगायी गयी है।

  • toArray() का use करके results को array में convert किया गया है।

NestJs MongoDB insert()

Insert operations के लिए आप insertOne() और insertMany() का use कर सकते हैं MongoDB के native driver के साथ।

File : src/user/user.service.ts

// Insert single user with raw query async insertUserRaw(userData: any): Promise<any> { const result = await this.connection.db.collection('users').insertOne(userData); return result; }

यहां insertOne(userData) का use करके एक नया user document MongoDB में insert किया जा रहा है।

Insert Multiple Records

// Insert multiple users with raw query async insertMultipleUsersRaw(usersData: any[]): Promise<any> { const result = await this.connection.db.collection('users').insertMany(usersData); return result; }

यहां insertMany(usersData) का use करके एक साथ multiple user documents insert किये जा रहे हैं।

NestJs MongoDB Update

MongoDB में update operations के लिए आप updateOne(), updateMany(), और findOneAndUpdate() methods का use कर सकते हैं।

File : src/user/user.service.ts

// Update a user with raw query async updateUserRaw(id: string, updateData: any): Promise<any> { const result = await this.connection.db.collection('users').updateOne( { _id: new this.connection.mongo.ObjectId(id) }, // Find by ID { $set: updateData } // Update data ); return result; }

यहां

  • updateOne() का use करके एक specific user को ID के basis पर update किया गया है।

  • $set operator का use करके हम fields को update कर रहे हैं।

NestJs MongoDB Delete

Delete operations के लिए आप deleteOne() और deleteMany() का use करते हैं , इससे specific या multiple records को delete किया जा सकता है।

File : src/user/user.service.ts

// Delete a user with raw query async deleteUserRaw(id: string): Promise<any> { const result = await this.connection.db.collection('users').deleteOne( { _id: new this.connection.mongo.ObjectId(id) } // Delete by ID ); return result; }

यहां deleteOne() का use करके specific ID के basis पर user को delete किया गया है।

Delete Multiple Records

// Delete users with age less than given value async deleteUsersByAgeRaw(age: number): Promise<any> { const result = await this.connection.db.collection('users').deleteMany({ age: { $lt: age } }); return result; }

यहां deleteMany() का use करके users को age के basis पर delete किया जा रहा है।

NestJs Mongo Best Practices

  • Use Raw Queries Only When Necessary : जब आपको fine-grained control या performance optimizations चाहिए हो तभी raw queries का use करें। For general CRUD operations, Mongoose का use best practice होता है।

  • Parameterize Queries to Avoid Injection : Raw queries लिखते वक्त always ensure करें कि आप parameters का use करें ताकि SQL/NoSQL injection attacks से बचा जा सके।

  • Optimize Query Performance : Raw queries में indexes का ध्यान रखें, ताकि queries fast execute हों। Specially large datasets के लिए, explain() method का use करके queries को analyze करें।

  • Handle Errors Properly : Raw queries में अगर कोई error आता है तो proper error handling implement करें। MongoDB driver से errors को catch करना जरूरी होता है ताकि आपको debugging और troubleshooting में help मिले।

Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 4.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook