Я разрабатываю систему тикетов, и мне нужно отфильтровать события с заданными свойствами.
Моя модель событий такая.
const Event = new mongoose.Schema({
name: String,
slug: String,
venue: {
type: mongoose.Schema.Types.ObjectId,
ref: venue.modelName,
},
promoters: [{
type: mongoose.Schema.Types.ObjectId,
ref: promoter.modelName,
}],
artists: [{
type: mongoose.Schema.Types.ObjectId,
ref: artist.modelName,
}],
});
Моя модель объекта такая
const Venue = new mongoose.Schema({
name: String,
slug: String,
tags: [String],
capacity: Number,
promoters: [{
type: mongoose.SchemaTypes.ObjectId,
ref: promoter.modelName,
}],
});
Я написал поисковый запрос
db.getCollection("events").aggregate([
// Lookup for venues
{ "$lookup": {
"from": "venues",
"localField": "venue",
"foreignField": "_id",
"as": "venue"
}},{"$unwind":"$venue"},
// Lookup for promoters.
{"$unwind":"$promoters"},
{ "$lookup": {
"from": "promoters",
"localField": "promoters",
"foreignField": "_id",
"as": "promoters"
}},
// Lookup for artists.
{"$unwind":"$promoters"},
{ "$lookup": {
"from": "artists",
"localField": "artists",
"foreignField": "_id",
"as": "artists"
}},
])
, чтобы все объекты работали нормально.
Когда я изменяю поисковый запрос художника на
// Lookup for artists.
{"$unwind":"$artists"},
{ "$lookup": {
from: 'artists',
as: 'artists',
let: { artist: '$artist._id' },
pipeline: [
{ $match: {
$expr: { $eq: ['$slug', 'artist-1'] },
}
}
]
}},
MongoDB возвращает дубликаты результатов, когда художники показывают только «Artist-1».
Как получить события, содержащие Artist-1, и просмотреть всех исполнителей с этим событием?