使用QueryBuilder查找包含元素的数组

时间:2015-05-29 17:41:26

标签: java mongodb

我有这样的数据库结构:

{
    "_id" : "Foo",
    "registrations" : [ 
        101, 
        102
    ]
}

我想要做的是创建一个查询,找到包含"注册的所有文档"包含值101的数组。我想尽可能使用QueryBuilder因为我通常觉得它更容易使用。

基于this answer,我尝试使用elemMatch()来查找它,但这似乎没有达到预期的效果:

QueryBuilder.start().put("registrations").elemMatch(new BasicDBObject("_id", 101)).get();

然而,堆栈跟踪表示它正在尝试将BasicDBObject转换为Integer并失败。

java.lang.ClassCastException: java.lang.Integer cannot be cast to com.mongodb.DBObject

那么如何使用QueryBuilder创建一个查询,它将查找包含"注册的所有文档"数组中是否包含值101

1 个答案:

答案 0 :(得分:0)

经过一些实验,我发现我想要的是$in运算符,它允许您检查数组是否包含特定值。对于我的特定查询,codeI正在寻找的是:

QueryBuilder.start().put(registrations).in(Arrays.asList(101)).get();

这会返回ID为DBObject的{​​{1}}。

如果我要查找多个注册,我可以将它们放在"Foo"的参数列表中。