首页 > 解决方案 > 我想将本机 mongo 查询转换为 spring boot mongo 存储库查询

问题描述

Asset {
    ObjectState objectState = ObjectState.CURRENT
    String description
    @NotEmpty(message = "*Please provide a asset name")
    @Length(min = 2, max = 50, message = "*Asset name must have characters between 2 and 50")
    String assetName
    @DBRef
    Company company
}

这是我的资产类,其中公司是用户现在我想按资产名称或描述执行搜索,然后我在 AssetRepository 中写一个查询,如下所示

Page<Asset> findAllByAssetNameIgnoreCaseContainingOrDescriptionIgnoreCaseContainingAndObjectState(searchQuerty,searchQuery,pageable,objectState)


它将在所有资产中搜索现在我想为特定用户(公司)编写查询我在下面写了一个这样的查询,但它使用 searchQuery“test”返回所有资产(其他用户也)

 Page<Asset> fetchAssetBySearchStringAndCompanyAndObjectState(Company company, Pageable pageable, String searchQuery) {
            ObjectState objectState = ObjectState.CURRENT
            if (!pageable) {
                pageable = PageRequest.of(0, 10, Sort.Direction.DESC, "lastUpdated")
            }
            if (searchQuery) {
                return assetRepository.findAllByCompanyInAndAssetNameIgnoreCaseContainingOrDescriptionIgnoreCaseContainingAndObjectState(company, searchQuery, searchQuery, pageable, objectState)
            } else {
                return assetRepository.findAllByCompanyAndObjectState(company, objectState, pageable)
            }
        }

我写了一个这样的mongo本机查询

db.assets.find({
     "company" : {
        "$ref" : "users",
        "$id" : ObjectId("60709ab978f45041425be752")
    },
    "objectState":"CURRENT",
    $or : [ 
        {"assetName":  { $regex:"test girl", $options:'i' }},
        {"description":  { $regex:"test girl", $options:'i' }}
       ],
      
})

标签: spring-bootgroovyspring-data-mongodb

解决方案


推荐阅读