بهرام
2 سال پیش توسط بهرام مطرح شد
1 پاسخ

MongoDB : کوئری برای دریافت آخرین پست ارسالی هر کاربر

سلام و وقت بخیر
در MongoDB یک کالکشن برای کاربران و یک کالکشن هم برای پست ها وجود داره.
از aggregation استفاده کردم و آخرین پست هر کاربر رو ( با limit = 20 ) دریافت کردم. اما این کوئری همینطوری که تعداد پست ها افزایش پیدا میکنن، سرعت اجراش کم و کمتر میشه. خیلی وقته درگیر این موضوع هستم و نمیدونم باید چیکار کنم. هیچ جا هم جواب مناسبی دریافت نکردم.
در ادامه، Schema فعلی دو مدل رو قرار میدم.
Schema مربوط به users

const mongoose = require("mongoose");

const UserSchema= new mongoose.Schema({
  username: {
    type: String,
    minLength: 4,
    maxLength: 20,
    trim: true,
    lowercase: true,
    required: true,
  },
  firstName: {
    type: String,
    trim: true,
    lowercase: true,
  },
  lastName: {
    type: String,
    trim: true,
    lowercase: true,
  },
  created_at: {
    type: Date,
    default: Date.now,
  },
});

و Schema مربوط به posts

const PostsSchema = new mongoose.Schema({
  title: {
    type: String,
    required: true,
    trim: true,
    minlength: 5,
    maxlength: 255,
  },
  body: {
    type: String,
    required: true,
  },
  user: {
    type: String,
   type: mongoose.Schema.Types.ObjectId,
    ref: "User", 
  },
  created_at: {
    type: Date,
    default: Date.now,
  },
});

لطفاً اگه ممکنه، راهنمایی کنید که چطور میتونم به اون کوئری مورد نظر برسم؟


ثبت پرسش جدید
محمد حیدری
تخصص : برنامه نویس فول استک جاوااسکری...
@pezhmanheidaryrostamy1373 2 سال پیش مطرح شد
0

با سلام . شما چرا از دوتا type برای یوزر در پست ها استفاده کردید! اونی که استرینگ نوشتیدو پاک کنید.چون برای رابطه حتما باید ObjectId باشه.
مورد بعدی اینکه خوب شما میتونید از find به راحتی استفاده کنید .
برای افزایش سرعت اگر میخواید از مونگوز استفاده کنید از lean اسفاده کنید . و راه دیگش که سرعت دوبرابر میتونید داشته باشید استفاده از خود مونگو دی بی توی این کوئریتون به جای مونگوزه.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام