Spring 具有 MongoDB 的数据 - 按可为空的字段查找
Spring Data with MongoDB - Find by nullable fields
我有一个 Mongo 集合,其中包含这样的文档:
a: { product: 1, country: 2, stock: 1}
b: { product: 1, country: 3, stock: 3}
c: { product: 2, country: 1, stock: 1}
有时我想获得所有国家/地区的产品库存(因此我检索所有国家/地区的产品库存然后添加它们)而其他时候我想要特定国家/地区的库存。
是否可以制作一个 单一 方法,例如:
findByProductAndCountry(Integer product, Integer country)
工作方式如下:
findByProductAndCountry(1, 2) //returns document a
findByProductAndCountry(1, null) //returns documents a and b
提前致谢!
回答你的问题:不可以。不可能在 mongodb 中编写这样的查询,因此你无法使用单个 spring 数据 mongodb 方法实现。
我的建议是为此在存储库接口中编写一个默认方法。这样您就可以将它与其余的查询方法一起使用:
public interface ProductRepository extends MongoRepository<Product, String> {
List<Product> findByProduct(int product);
List<Product> findByProductAndCountry(int product, int country);
default List<Product> findByProductAndNullableCountry(Integer product, Integer country) {
if (country != null) {
return findByProductAndCountry(product, country);
} else {
return findByProduct(product);
}
}
}
我有一个 Mongo 集合,其中包含这样的文档:
a: { product: 1, country: 2, stock: 1}
b: { product: 1, country: 3, stock: 3}
c: { product: 2, country: 1, stock: 1}
有时我想获得所有国家/地区的产品库存(因此我检索所有国家/地区的产品库存然后添加它们)而其他时候我想要特定国家/地区的库存。
是否可以制作一个 单一 方法,例如:
findByProductAndCountry(Integer product, Integer country)
工作方式如下:
findByProductAndCountry(1, 2) //returns document a
findByProductAndCountry(1, null) //returns documents a and b
提前致谢!
回答你的问题:不可以。不可能在 mongodb 中编写这样的查询,因此你无法使用单个 spring 数据 mongodb 方法实现。
我的建议是为此在存储库接口中编写一个默认方法。这样您就可以将它与其余的查询方法一起使用:
public interface ProductRepository extends MongoRepository<Product, String> {
List<Product> findByProduct(int product);
List<Product> findByProductAndCountry(int product, int country);
default List<Product> findByProductAndNullableCountry(Integer product, Integer country) {
if (country != null) {
return findByProductAndCountry(product, country);
} else {
return findByProduct(product);
}
}
}