If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
Mongoose का Query Builder एक flexible API provide करता है जिससे आप MongoDB के powerful queries को chain कर सकते हैं। यह आपको data manipulate करने के लिए CRUD (Create, Read, Update, Delete) और complex operations जैसे aggregation और lookup को perform करने कि सुविधा देता है।
Mongoose Query Builder के through आप -
Records retrieve कर सकते हैं with filtering, sorting, and pagination.
Records update कर सकते हैं specific conditions के साथ।
Records delete कर सकते हैं।
Aggregations जैसे operations कर सकते हैं for complex data processing.
Lookups कर सकते हैं जो MongoDB के version 3.2 के बाद introduced "Joins
" जैसा काम करते हैं।
अब हम अलग-अलग operations को implement करना सीखेंगे।
हालाँकि हम पहले ही Collection/Entity
बनाना और उसमे data insert करने के साथ - साथ Retrieve करना भी सीखा था। इस topic में हम update , delete , lookup etc देखेंगे।
●●●
MongoDB में records को update करने के लिए आप Mongoose के findByIdAndUpdate()
, updateOne()
, या updateMany()
methods का use कर सकते हैं।
File : src/user/user.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User } from './schemas/user.schema';
@Injectable()
export class UserService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
// Update user by ID
async updateUserById(id: string, updateUserDto: any): Promise<User> {
return this.userModel.findByIdAndUpdate(id, updateUserDto, { new: true }).exec();
}
// Update user by email
async updateUserByEmail(email: string, updateUserDto: any): Promise<User> {
return this.userModel.updateOne({ email }, updateUserDto, { new: true }).exec();
}
}
यहां -
findByIdAndUpdate()
method का use करके हम specific ID के basis पर एक user record को update कर रहे हैं।
updateOne()
का use करके हम एक user को email के basis पर update कर रहे हैं।
Options
{ new: true }
: इससे MongoDB updated document को return करेगा instead of थे old one.
●●●
Records को delete करने के लिए Mongoose के पास methods जैसे findByIdAndDelete()
, deleteOne()
, और deleteMany()
होते हैं।
File : src/user/user.service.ts
@Injectable()
export class UserService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
// Delete user by ID
async deleteUserById(id: string): Promise<User> {
return this.userModel.findByIdAndDelete(id).exec();
}
// Delete user by email
async deleteUserByEmail(email: string): Promise<any> {
return this.userModel.deleteOne({ email }).exec();
}
}
यहां
findByIdAndDelete()
का use करके हम specific ID के basis पर user को delete कर रहे हैं।
deleteOne()
का use करके हम user को email के basis पर delete कर रहे हैं।
●●●
Aggregation
एक powerful tool है जो MongoDB को structured और analyzed data retrieve करने में help करता है। Aggregation का use करते हुए आप group, filter, sort, और calculate कर सकते हैं data को एक structured form में।
File : src/user/user.service.ts
@Injectable()
export class UserService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
// Aggregation to calculate average age of users
async calculateAverageAge(): Promise<any> {
return this.userModel.aggregate([
{ $group: { _id: null, averageAge: { $avg: "$age" } } }
]).exec();
}
// Aggregation to get users grouped by age
async groupUsersByAge(): Promise<any> {
return this.userModel.aggregate([
{ $group: { _id: "$age", users: { $push: "$$ROOT" } } }
]).exec();
}
}
Example में -
$group
aggregation stage का use करके हम users को age के basis पर group कर रहे हैं।
$avg
operator का use करके average age calculate कर रहे हैं।
$match
: Filtering करने के लिए।
$group
: Data को group करने के लिए।
$project
: Specific fields को include/exclude करने के लिए।
$sort
: Data को sort करने के लिए।
$limit
: Data को limit करने के लिए।
●●●
MongoDB में joins
को lookup
के साथ implement किया जा सकता है। यह तब useful होता है जब आपको दो या ज़्यादा collections को join करना हो।
File : src/user/user.service.ts
Suppose हमारे पास एक Profile
collection है जो User
collection के साथ related है।
@Injectable()
export class UserService {
constructor(@InjectModel(User.name) private userModel: Model<User>) {}
// Perform a lookup between User and Profile
async lookupUserProfiles(): Promise<any> {
return this.userModel.aggregate([
{
$lookup: {
from: 'profiles', // Name of the profile collection
localField: '_id', // Field from User collection
foreignField: 'userId', // Field from Profile collection
as: 'profileInfo' // Alias for joined data
}
}
]).exec();
}
}
यहां
$lookup
का use करके हम User collection को Profile collection के साथ join कर रहे हैं।
from : जो collection join करनी है।
localField : जो field join के लिए use होगी from User.
foreignField : जो field Profile collection से join होगी।
as
: Joined data को profileInfo के alias के साथ return करेंगे।