我有这样的数据库结构:
{
"_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
?
答案 0 :(得分:0)
经过一些实验,我发现我想要的是$in
运算符,它允许您检查数组是否包含特定值。对于我的特定查询,codeI正在寻找的是:
QueryBuilder.start().put(registrations).in(Arrays.asList(101)).get();
这会返回ID为DBObject
的{{1}}。
如果我要查找多个注册,我可以将它们放在"Foo"
的参数列表中。