Запрос MongoDb в зависимости от того, указано ли поле или нет - PullRequest
0 голосов
/ 13 июля 2020

Приносим извинения за неправильную формулировку. У меня вопрос по запросу MongoDb. Скажем, я хочу получить список книг с указанным ISBN, если он принят. Если не пройдет, мне все равно нужен список, основанный на других параметрах. Ниже мой фрагмент кода

async findBooks(rawNameValues) {
try {
  const nameValues = this._validate('findBooks', rawNameValues);
  //@TODO
  console.log('find books', nameValues);
  const authorsTitle = new RegExp(`.*${nameValues.authorsTitleSearch}.*`);
  console.log('Authors Title', authorsTitle);
  
  const cursor = await this.db.collection(COLLECTIONS.BOOK_CATALOG).find(
    {
      isbn: '' || nameValues.isbn.toString(),
      title: {$regex: authorsTitle}
    }
   
  ).toArray();
  return cursor || [];
} catch (err) {
  console.log('Caught Error', err);
  
}}

Однако его поймают, если isbn не передан. Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 13 июля 2020

попробуйте эту опцию перед фильтром на наличие isbn :

let custom_filter = nameValues.isbn ? {isbn: 
      nameValues.isbn.toString(), title: {$regex: authorsTitle}} :
    {title: {$regex: authorsTitle}};
let query = await  
this.db.collection(COLLECTIONS.BOOK_CATALOG).find(custom_filter)
...