0

我正在尝试获取Author详细信息,例如他/她的书籍类别为“科学”,并且价格> 20 或页面> 300。

*Author*
id
name
country
books

*Book*
id
name
category
price
edition
pages
author_id

使用如下查询:

authorRepository.find(filter, {})

并且filter作为:

{
     "books": {
         "$and": [{
                 "category": {
                     "$eq": "Science"
                 }
             }, {
                 "$or": [{
                         "price": { $eq: 20 }
                     }, {
                         "pages": { $gt: 300 }
                     }
                 ]
             }
         ]
     }
 }

SQL查询变为:

select "e0"."*" from "author" as "e0" left join "book" as "e1" on "e0"."id" = "e1"."author_id" 
where "e1"."category" = 'Science' and ("e0"."price" = 20 or "e0"."pages" > 300)

不知道为什么嵌套$or条件应用于e0( Author) 而不是e1( Book)。

4

1 回答 1

0

看起来像一个错误,但我相信当您将组运算符移动到顶层时它应该可以正常工作。您不需要使用$and,因为它是隐式的,以及$eq,所以简化版本可能如下所示:

const filter = {
  books: { category: 'Science' },
  $or: [
    { books: { price: 20 } },
    { books: { pages: { $gt: 300 } } },
  ],
};
于 2021-06-18T11:34:03.407 回答