我使用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注解这样的内置支持?
或者我怎么才能做到这一点?
发布于 2015-10-20 19:56:30
实际上,您希望使用运算符来获得所需的结果。在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);
}如果上述方法不适用于您,您可能需要创建一个自定义接口和实现类来执行自定义查询。例如,创建一个名称在Custom后面的接口:
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);
}
}https://stackoverflow.com/questions/33234756
复制相似问题