У меня есть база данных mongoDB, содержащая События . Каждое событие определяется несколькими полями, включая массив жанров (которые являются вложенными документами, состоящими из {genre и subGenre}).
Например: событие может иметь {жанр: "музыка", subGenre: "джаз"} и {жанр: "музыка", subGenre: "блюз"}. См. event.js - модель. В этом случае 2 субдокумента «жанр» добавляются в массив «жанры» в документе «Событие» в базе данных.
Вернитесь в мое приложение узла - см. query.ts - Iя пытаюсь понять, как выполнить запрос, который позволяет пользователю искать все события, соответствующие их жанровым предпочтениям.
Итак:
- Событие определяется массивом жанров. (в базе данных) и
- предпочтения пользователя определяются массивом жанров (в приложении
).
Я хочу определитьЗапрос mongoDB, который возвращает все события, где есть совпадение любой комбинации 1 {genre, subGenre} между двумя массивами.
Я смотрел на $ в Query Selector в mongoDBдокументацию и подозреваю, что это может потребоваться ... но программно, как мне написать запрос, который расширяется и включает все значения в переменной "searchGenres" в query.ts ?
Заранее большое спасибо за ваши мысли.
event.js: модель mongoDB для «событий», определенная с использованием Mongoose - фрагмент:
let mongoose = require('mongoose');
let EventSchema = new mongoose.Schema({
genres: [
{
genre: String,
subGenre: String
}
]
)};
module.exports = mongoose.model('Event', EventSchema);
query.ts:
import mongoose = require('mongoose');
let Event = require ('../models/event');
class Genre {
genre: string;
subGenre: string;
constructor (gen: string, sub: string) {
this.genre = gen;
this.subGenre = sub;
}
}
async function runQuery()
{
let searchGenres : Array<Genre> = new Array<Genre>();
// populate searchGenres with some data here... e.g.
const searchGenre1 : Genre = new Genre ('music', 'jazz');
const searchGenre2 : Genre = new Genre ('music', 'rock');
searchGenres.push(searchGenre1);
searchGenres.push(searchGenre2);
// Query logic here:
// Return all events from the database, if the 'genres' array
// in the document matches any element in the searchGenres array
// defined above..
const events = await Event.find ({
'genres': {?help? }
});
}
```