Mongodb 通过同一属性中的两个嵌套属性查找

Mongodb 通过同一属性中的两个嵌套属性查找,mongodb,mongodb-query,spring-data-mongodb,Mongodb,Mongodb Query,Spring Data Mongodb,我有两个文档名为Book和Shop。在书文档中,我有一个列表,其中列出了shop的可用性对象以及shopStatus的可用性 在这个列表中,我列出了这本书可以购买的商店,如果相关商店的书缺货,我可以在以后提供或不提供 DTO 教材{ 私有字符串id; 私有字符串名称; 私人布伦活跃; ..... 商店的私有列表可用性; } 商店的类可用性{ 私人字符串shopId; 私有可用性ForShopStatus可用性ForShopStatus; } ShopStatus的枚举可用性{ 可用的,不可用的

我有两个文档名为
Book
Shop
。在
文档中,我有一个
列表
,其中列出了
shop的可用性
对象以及
shopStatus的可用性

在这个列表中,我列出了这本书可以购买的商店,如果相关商店的书缺货,我可以在以后提供或不提供

DTO

教材{
私有字符串id;
私有字符串名称;
私人布伦活跃;
.....
商店的私有列表可用性;
}
商店的类可用性{
私人字符串shopId;
私有可用性ForShopStatus可用性ForShopStatus;
}
ShopStatus的枚举可用性{
可用的,不可用的
}
现在我想为一家商店买所有可用的书。我添加了如下查询:

@RestResource(path = "availableBooksForShop")
@Query("{'$and': [{'active': 'true'}, {'availabilityForShops.shopId' : ?0}]}")
Page<Book> findAvailableBooksForShop(String shopId);
@RestResource(path=“availableBooksForShop”)
@查询({'$and':[{'active':'true'},{'availabilityForShops.shopId':?0}]})
页面findAvailableBooksForShop(字符串shopId);

这就是我提出的问题。但它将只返回与shopId匹配的图书,而不考虑该匹配值的shopStatus可用性。我如何才能获得与
shopId
匹配的书籍,并且该商店的可用性是
可用的

您是否在
availabilityForShops
上使用
@DBRef
?您在查询中没有使用
availabilityForShopStatus
,这就是为什么只应用shopId筛选器,添加它以获得您想要的结果。您也可以使用elemMatch。它将更适合您的用例。
@RestResource(path = "availableBooksForShop")
@Query("{'$and': [{'active': 'true'}, {'availabilityForShops.shopId' : ?0}]}")
Page<Book> findAvailableBooksForShop(String shopId);