首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在文档包含数组的spring中进行mongo查询

在文档包含数组的spring中进行mongo查询
EN

Stack Overflow用户
提问于 2015-10-20 18:54:59
回答 1查看 16.6K关注 0票数 12

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

代码语言:javascript
复制
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注解这样的内置支持?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-20 19:56:30

实际上,您希望使用运算符来获得所需的结果。在mongo shell中,以下操作将带来文档:

填充测试集合

代码语言:javascript
复制
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']
    }
])

运行操作

代码语言:javascript
复制
> 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注释一样,我还没有对此进行测试,但您可能希望尝试以下自定义查询实现示例

代码语言:javascript
复制
@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);
}

如果上述方法不适用于您,您可能需要创建一个自定义接口和实现类来执行自定义查询。例如,创建一个名称在Custom后面的接口:

代码语言:javascript
复制
public interface TestRepositoryCustom {
    public List<Test> findAnyOfTheseValues(String[] arrayValues); 
}

修改TestRepository,增加需要扩展的TestRepositoryCustom接口:

代码语言:javascript
复制
@Repository
public interface TestRepository extends TestRepositoryCustom, MongoRepository {

}

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

代码语言:javascript
复制
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);
    }
}
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33234756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档