У меня есть коллекция приборов, которые содержат вложенные массивы.Я хочу, чтобы иметь возможность искать надежно.Вот моя модель и мой код ниже.Спасибо
const team = {
ref: 'TeamModel',
type: Array,
name: {
type: String,
enum: ['AFC Bournemouth', 'Arsenal', 'Aston Villa', 'Brighton & Hove Albion', 'Burnley', 'Chelsea',
'Crystal Palace', 'Everton', 'Leicester City', 'Liverpool', 'Manchester City', 'Manchester United',
'Newcastle United', ' Norwich City', 'Sheffield United', 'Southampton', 'Tottenham Hotspur', 'Watford',
'West Ham United', 'Wolverhampton Wanderers']
},
score: { type: Number, default: 0 }
};
const fixtureSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
teamA: team,
teamB: team,
status: { type: String, default: 'pending' },
matchInfo: {
type: Array,
date: Date,
stadium: {
type: String,
enum: ['Vitality Stadium', 'The Amex', 'Turf Moor', 'Cardiff City Stadium',
"John Smith's Stadium", 'King Power Stadium', 'Goodison Park', 'Anfield',
'Emirates Stadium', 'Stamford Bridge', 'Selhurst Park', 'Craven Cottage',
'Wembley Stadium', 'London Stadium', 'Etihad Stadium', 'Old Trafford',
'St James Park', "St Mary's Stadium", 'Vicarage Road', 'Molineux Stadium']
}
},
createdAt: { type: Date, default: moment(Date.now()).format('LLLL') },
updatedAt: { type: Date, default: moment(Date.now()).format('LLLL') },
});
const {
name, date, stadium, status, score
} = req.body;
try {
if (name || date || stadium || status) {
const fixture = await FixtureModel.find({
$or: [
{ status },
{ teamA: { name, score } },
{ teamB: { name, score } },
{ matchInfo: { $elemMatch: { date, stadium } } },
]
})
.exec();
if (fixture.length <= 0) {
return response(res, 404, 'error', {
message: messages.fixtureNotFound
});
}
return response(res, 200, 'success', {
fixture
});
}
} catch (error) {
console.log(error);
return response(res, 400, 'error', {
message: messages.error
});
}
}
С моей нынешней реализацией работает только поиск со статусом.поиск с другими возвращает пустой объект, несмотря на наличие соответствующих параметров в коллекции.
status: может быть ['completed', 'pending']
stadium: может быть ['Vitality Stadium', 'The Amex', 'Turf Moor', 'Cardiff City Stadium',
"John Smith's Stadium", 'King Power Stadium', 'Goodison Park', 'Anfield',
'Emirates Stadium', 'Stamford Bridge', 'Selhurst Park', 'Craven Cottage'...]
Вот репо филиал .функция в строке 297