راکت

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

1 پاسخ

سلام و وقت بخیر
در 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,
  },
});

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

بهرام
بهرام
@tasnimdownload
ثبت پرسش جدید

پاسخ‌ها

1
محمد حیدری
محمد حیدری
@pezhmanheidaryrostamy1373

تخصص: برنامه نویس فول استک جاوااسکریپت

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

شاید پاسخ شما همین‌جا باشد

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

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