使用 Mikro-orm 查询连接

问题描述

我正在尝试获取 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)。

解决方法

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

const filter = {
  books: { category: 'Science' },$or: [
    { books: { price: 20 } },{ books: { pages: { $gt: 300 } } },],};