gpt4 book ai didi

spring - 在 Spring 中进行 mongo 查询,其中 Document 包含数组

转载 作者:IT老高 更新时间:2023-10-28 13:22:05 26 4
gpt4 key购买 nike

我正在使用 spring 和 mongo 进行 API 开发,文档结构如下:

Document-1
myId:1
array:['abc','jkl','xyz']

Document-2
myId:3
array:['qwe','mnp','xyz']

Document-3
myId:3
array:['ped','abc','xyz']

My url : localhost:8080/array=xyz
expected : document-1,document-2,document-3

My url: localhost:8080/array=xyz,abc
exoected: document-1,document-3

简而言之,我希望结果中的所有文档都包含所有逗号分隔的 array 变量。

spring 是否提供了像 @Query 注解这样的内置支持?

或者我怎样才能做到这一点?

最佳答案

您实际上想使用 $all 运算符以获得所需的结果。在mongo shell中,下面的操作会带上文件:

填充测试集合

db.test.insert([
{
_id: 1,
myId: 1,
array: ['abc','jkl','xyz']
},
{
_id: 2,
myId: 3,
array: ['qwe','mnp','xyz']
},
{
_id: 3,
myId: 3,
array:['ped','abc','xyz']
}
])

运行操作

> db.test.find({"array": { "$all": ["xyz"] }})
{ "_id" : 1, "myId" : 1, "array" : [ "abc", "jkl", "xyz" ] }
{ "_id" : 2, "myId" : 3, "array" : [ "qwe", "mnp", "xyz" ] }
{ "_id" : 3, "myId" : 3, "array" : [ "ped", "abc", "xyz" ] }

> db.test.find({"array": { "$all": ["abc", "xyz"] }})
{ "_id" : 1, "myId" : 1, "array" : [ "abc", "jkl", "xyz" ] }
{ "_id" : 3, "myId" : 3, "array" : [ "ped", "abc", "xyz" ] }

与 Spring Data MongoDB 中的 @Query 注释一样,我没有对此进行测试,但您可能想尝试以下自定义查询实现示例

@Document(collection="test")
class Test {
int myId;
String[] array;
}

public interface TestRepository extends MongoRepository<Test, Integer> {
@Query(value = "{ 'array' : {$all : [?0] }}")
public List<Test> findAnyOfTheseValues(String[] arrayValues);
}

如果上述方法不适合您,您可能需要创建一个自定义接口(interface)和您的实现类来执行自定义查询。例如,创建一个名称附加自定义的接口(interface):

public interface TestRepositoryCustom {
public List<Test> findAnyOfTheseValues(String[] arrayValues);
}

修改TestRepository,增加TestRepositoryCustom接口(interface)进行扩展:

@Repository
public interface TestRepository extends TestRepositoryCustom, MongoRepository {

}

创建您的实现类以实现 TestRepositoryCustom 接口(interface)中定义的方法。

public class TestRepositoryImpl implements TestRepositoryCustom {

@Autowired
MongoTemplate mongoTemplate;

@Override
public List<Test> findAnyOfTheseValues(String[] arrayValues) {
return mongoTemplate.find(
Query.query(Criteria.where("array").all(arrayValues)), Test.class);
}
}

关于spring - 在 Spring 中进行 mongo 查询,其中 Document 包含数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33234756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com