查询在数组中具有特定元素的记录

时间:2013-05-03 12:33:44

标签: spring mongodb spring-data mongodb-query spring-data-mongodb

所以我试图搜索具有任何给定标签的文件(即“a”,“b”或“c”)。

MongoDB查询是:

db.my_collection.find({ "tags" : { "$elemMatch" : { "$in" : ["a", "b", "c"] } } })

这很好用(标签是一个文档字段,它是文档的标签数组)。现在问题是当我尝试使用SpringData Query和Criteria对象构建此查询时。

List<String> tags = Arrays.asList("a", "b", "c");
Criteria inTags = new Criteria().in(tags);
Criteria where = Criteria.where("tags").elemMatch(inTags);
Query query = new Query(where);
System.out.println(query);

这个输出是:

Query: { "tags" : { "$elemMatch" : { }}}, Fields: null, Sort: null

这当然不会最终为我工作。有谁知道如何使用SpringData查询/条件。我对丑陋的解决方案或直接使用MongoDB Java驱动程序不感兴趣 - 我可以这样做。我想知道是否有任何方法可以使用SpringData类做到这一点。

1 个答案:

答案 0 :(得分:1)

您在这里以非标准方式使用$elemMatch,因为它意味着匹配单个数组元素中的多个字段。请改用这样的查询:

db.my_collection.find({ "tags": "$in": ["a", "b", "c"] })

这应该更容易在SpringData中工作。