您基本上想要使用$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);
}
}
我已經測試了@Query,但是它並不按照它的方式工作。我得到localhost的結果:8080 /數組= ABC,XYZ。它是隻給有「數組」的文件:「ABC」,「XYZ」]只。即使訂單也很重要。而不是給包含數組的文件:[「abc」,「xyz」,「ped」]。測試第二個解決方案 –
非常感謝,但是大小寫不敏感,可能嗎? +1 – Jaiwo99