سه تا مدل دارم Room -> Project -> Account
const RoomSchema = new BaseSchema({
project: {
type: Schema.ObjectId,
ref: 'Project'
},
})
const Project = new BaseSchema({
owner: {
type: Schema.ObjectId,
ref: 'Account'
},
})
روی Room به شکل زیر دارم aggregate میزنم
const userRoomsProjects = await RoomModel.aggregate([
{
$lookup: {
from: "projects",
localField: "project",
foreignField: "_id",
as: "project",
},
},
{ $match: {"item.owner": userId}}
]);
میخوام room هایی برگرده که ایدی کاربرشون در project ، برابر با userId باشه ولی هر کاری کردم نشد؟!
باید اول lookup رو انجام بدی و بعد با $match روی project.owner فیلتر کنی اما چون lookup به صورت آرایه برمیگردونه باید چک کنی که آیا owner مقدار userId رو داره یا نه. این کار رو میتونی با $unwind حل کنی.
امیدوارم مشکلت رو حل کنه
سلام
ممنون بابت راهنماییتون
تازه کارم و نفهمیدم چیکار کنم دقیقا
خواهش میکنم یه نمونه کد بدید ، خیلی گیر کردم سر این مورد.
ممنون استاد
یه چیزی شبیه به این :
const userRoomsProjects = await RoomModel.aggregate([
{
$lookup: {
from: "projects",
localField: "project",
foreignField: "_id",
as: "project",
},
},
{ $unwind: "$project" }, // پروژه رو از آرایه خارج کن
{ $match: { "project.owner": userId } } // فیلتر کردن روی owner پروژه
]);
خیلی ممنون
سال نو هم به استاد خوبی مثل شما و تیم خوب تاپلرن تبریک میگم.
سعی کردم با همین کد به نتیجه برسم و حتی تغیرات هم دادم ولی نمیدونم چرا کار نمیکنه؟!
سلام دوست من
سال نو شما هم مبارک
با جستجو کردن باید مثالهای زیادی پیدا کنی
با اطلاعاتی که بهم دادی بیشتر از این نمیتونم کمکت کنم