2015-10-20 103 views
4

我使用的彈簧,並與下面的文檔結構蒙戈的API developemt:製作蒙戈查詢,其中文件包含陣列

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變量。

是否有元inbuild支持Spring提供了這個喜歡@Query註釋?

或者我怎樣才能達致這?

回答

5

您基本上想要使用$all運算符來獲得所需的結果。在蒙戈外殼,下面的操作將帶來的文件:

填充測試集

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" ] } 

與春季數據的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); 
} 

如果上述方法不爲你工作,你可能想創建一個自定義接口和實現類來執行自定義查詢。例如,創建一個接口與附加自定義一個名字:

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

修改TestRepository並添加TestRepositoryCustom接口進行擴展:

@Repository 
public interface TestRepository extends TestRepositoryCustom, MongoRepository { 

} 

創建您的實現類來實現TestRepositoryCustom定義的方法接口。

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); 
    } 
} 
+0

我已經測試了@Query,但是它並不按照它的方式工作。我得到localhost的結果:8080 /數組= ABC,XYZ。它是隻給有「數組」的文件:「ABC」,「XYZ」]只。即使訂單也很重要。而不是給包含數組的文件:[「abc」,「xyz」,「ped」]。測試第二個解決方案 –

+1

非常感謝,但是大小寫不敏感,可能嗎? +1 – Jaiwo99