اتصال محلی
بدون نشانی، mongosh معمولاً به سرویس محلی روی پورت پیشفرض وصل میشود.
mongosh// نشانی صریحmongosh "mongodb://127.0.0.1:27017"
مرجع عملی اتصال به MongoDB، کار با سندها، query و aggregation، ایندکس و نگهداری collection در mongosh. mongosh پوستهٔ تعاملی برای اتصال و اجرای JavaScript در MongoDB است. نشانی اتصال و نام پایگاه را از محیط امن بگیرید؛ رمز واقعی را در کد، history یا log قرار ندهید. CRUD سندها را با APIهای واضح و شرطهای محدود انجام میدهد. updateOne بهطور معمول فقط فیلدهای مشخص را با operator تغییر میدهد؛ جایگزینی کل سند با replaceOne باید تصمیمی آگاهانه باشد. از این صفحه بهعنوان مرجع سریع استفاده کنید و مثالها و نکتهها را با نسخهٔ ابزار، نیاز و شرایط واقعی پروژهٔ خود تطبیق دهید.
بدون نشانی، mongosh معمولاً به سرویس محلی روی پورت پیشفرض وصل میشود.
mongosh// نشانی صریحmongosh "mongodb://127.0.0.1:27017"برای محیط راهدور host/port یا URI خوشه را مشخص کنید؛ رمز را در prompt امن وارد کنید.
mongosh "mongodb://<host>:27017/<database>" --username <user>mongosh "mongodb+srv://<cluster>/<database>" --username <user>show dbs پایگاهها را فهرست میکند، db پایگاه جاری را نشان میدهد و use زمینهٔ shell را عوض میکند.
show dbsdbuse appshow collections نام collectionها را میدهد و load یک فایل JavaScript را در shell اجرا میکند.
show collectionsload("maintenance.js")insertOne یک سند و insertMany چند سند را درج میکند؛ برای شناسهٔ تکراری یا خطای اعتبارسنجی، رفتار نوشتن را بررسی کنید.
db.users.insertOne({ name: "Nina", role: "editor" })db.users.insertMany([ { name: "Arman", role: "author" }, { name: "Sara", role: "reviewer" }])findOne یک سند و find یک cursor برمیگرداند؛ در برنامهٔ کاربردی، تعداد نتایج را محدود کنید.
db.users.findOne({ name: "Nina" })db.users.find({ role: "editor" }).limit(20)$set مقدار فیلد را مینویسد، $inc شمارنده را تغییر میدهد و upsert در صورت نبود سند آن را ایجاد میکند.
db.users.updateOne( { _id: 42 }, { $set: { role: "admin" }, $inc: { loginCount: 1 } })db.users.updateOne( { email: "nina@example.com" }, { $set: { name: "Nina" } }, { upsert: true })updateMany سندهای منطبق را تغییر میدهد؛ replaceOne کل سند را جایگزین میکند، پس فیلدهای حفظنشده حذف خواهند شد.
db.users.updateMany( { active: false }, { $set: { archived: true } })db.users.replaceOne( { _id: 42 }, { name: "Nina", role: "editor" })deleteOne یک سند و deleteMany همهٔ سندهای منطبق را حذف میکند؛ پیش از حذف گسترده، همان filter را با find بسنجید.
db.users.deleteOne({ _id: 42 })db.users.deleteMany({ archived: true })writeConcern سطح تأیید عملیات نوشتن را تعیین میکند؛ مقدار مناسب را با نیاز دوام و latency هماهنگ کنید.
db.auditLogs.insertOne( { event: "user.updated", userId: 42 }, { writeConcern: { w: "majority", wtimeout: 5000 } })$push عضو اضافه میکند، $addToSet از عضو تکراری جلوگیری میکند و $pull عضوهای مطابق شرط را برمیدارد.
db.users.updateOne( { _id: 42 }, { $addToSet: { tags: "mongodb" }, $push: { events: { $each: ["login", "view"] } }, $pull: { tags: "legacy" } })$gt/$gte و $lt/$lte بازه میسازند؛ $in مقدارهای مجاز را مشخص میکند.
db.products.find({ price: { $gte: 10, $lt: 50 } })db.products.find({ status: { $in: ["active", "pending"] } })شرطهای همسطح بهطور پیشفرض با AND ترکیب میشوند؛ برای OR از operator صریح استفاده کنید.
db.orders.find({ $or: [{ status: "new" }, { priority: { $gte: 5 } }]})مقدار 1 فیلد را نگه میدارد و 0 آن را حذف میکند؛ بهجز _id معمولاً inclusion و exclusion را با هم ترکیب نکنید.
db.users.find( { active: true }, { name: 1, email: 1, _id: 0 })$elemMatch شرطهای چندگانه را روی یک عضو آرایه اعمال میکند؛ $exists وجود فیلد را بررسی میکند.
db.orders.find({ items: { $elemMatch: { sku: "A-7", quantity: { $gte: 2 } } }, shippedAt: { $exists: false }})1 ترتیب صعودی و -1 نزولی است؛ فیلد یکتا را به sort اضافه کنید تا ترتیب صفحهها پایدار بماند.
db.products.find({ active: true }) .sort({ createdAt: -1, _id: -1 }) .skip(20) .limit(10)countDocuments شمارش دقیق با filter و distinct مقدارهای یکتای یک فیلد را میدهد.
db.users.countDocuments({ active: true })db.users.distinct("role", { active: true })readConcern سطح تضمین خواندن داده را انتخاب میکند؛ پشتیبانی و معنا را با توپولوژی و نوع عملیات بررسی کنید.
db.orders.find({ status: "paid" }).readConcern("majority")$match مجموعه را محدود و $group سندها را بر اساس کلید گروهبندی میکند.
db.orders.aggregate([ { $match: { status: "paid" } }, { $group: { _id: "$customerId", total: { $sum: "$amount" } } }, { $sort: { total: -1 } }])$project فیلدهای خروجی را انتخاب میکند و میتواند مقدار محاسباتی بسازد.
db.orders.aggregate([ { $project: { customerId: 1, totalWithTax: { $multiply: ["$amount", 1.1] } } }, { $limit: 50 }])$unwind هر عضو آرایه را به رکوردی مستقل تبدیل میکند تا تحلیل جزئیتر ممکن شود.
db.orders.aggregate([ { $unwind: "$items" }, { $group: { _id: "$items.sku", quantity: { $sum: "$items.quantity" } } }])جستوجوی متن به text index نیاز دارد؛ برای نتیجهٔ رتبهبندیشده، textScore را بخوانید.
db.articles.createIndex({ title: "text", body: "text" })db.articles.find( { $text: { $search: "database indexing" } }, { score: { $meta: "textScore" } }).sort({ score: { $meta: "textScore" } })explain با executionStats اطلاعات واقعی اجرای query را نشان میدهد؛ آن را روی داده و محیط مناسب بررسی کنید.
db.orders.find({ status: "paid" }) .explain("executionStats")1 ترتیب صعودی و -1 نزولی است؛ ترتیب فیلدهای compound index را با filter و sort همراستا کنید.
db.users.createIndex({ email: 1 }, { unique: true })db.orders.createIndex({ status: 1, createdAt: -1 })getIndexes ایندکسها را نشان میدهد؛ حذف ایندکس نام آن را میگیرد و میتواند queryها را کند کند.
db.users.getIndexes()db.users.dropIndex("email_1")برای capped collection محدودیت اندازه و تعداد را تعیین کنید؛ گزینهها را با نیاز و نسخهٔ MongoDB تطبیق دهید.
db.createCollection("auditLogs", { capped: true, size: 1048576, max: 5000})TTL index سندهای منقضیشده را پاک میکند؛ unique و partial index را فقط وقتی شرط یکتایی و queryها واقعاً به آن نیاز دارند بسازید.
db.sessions.createIndex( { expiresAt: 1 }, { expireAfterSeconds: 0 })db.users.createIndex( { email: 1 }, { unique: true, partialFilterExpression: { email: { $exists: true } } })db.users.getIndexes()stats آمار collection و پایگاه را نشان میدهد؛ اندازهها و نسبت ذخیرهسازی را در کنار حجم داده تفسیر کنید.
db.orders.stats()db.stats()drop و dropDatabase داده را حذف میکنند؛ ابتدا پایگاه جاری و مقصد اتصال را تأیید و برای عملیات حساس backup بررسی کنید.
// بررسی زمینه پیش از هر عملیات پاکسازیdbshow collections// فقط پس از تأیید محیط و مجوز:// db.temporaryCollection.drop()// db.dropDatabase()status و config وضعیت و پیکربندی replica set جاری را نشان میدهند؛ دستورهای تغییر topology را بدون برنامهٔ عملیاتی اجرا نکنید.
rs.status()rs.conf()sh.status وضعیت کلستر shard را از shell متصل به mongos گزارش میکند.
sh.status()watch یک stream تغییر میسازد؛ Change Streams به deployment پشتیبانیشده و resume token برای بازیابی نیاز دارند.
const changes = db.orders.watch([ { $match: { operationType: "insert" } }]);changes.next();برای اتصال به shell از mongosh و URI متناسب با محیط استفاده کنید.
سندها را با insertOne، find، updateOne و deleteOne مدیریت کنید.
فیلتر، projection و sort را دقیق بنویسید و خروجی را محدود کنید.
pipelineهای aggregation را برای گروهبندی و تحلیل داده بهکار ببرید.
ایندکس را با توجه به query واقعی طراحی و plan اجرا را بررسی کنید.
در update، Operatorهایی مانند $set را بهکار ببرید؛ update جایگزین سند میتواند فیلدهای حذفشده از payload را پاک کند.
برای query و sort پرتکرار از explain("executionStats") استفاده کنید و ایندکس را با حجم واقعی نوشتن و خواندن ارزیابی کنید.