我有一个mongo db查询,我试图将其转换为java驱动程序查询。
db.sourceReference.distinct('sourceName',{sourceReferenceId:{$in:['565555ef4ee29e068f61dd74','565555ef4ee29e068f61dd73','565555ef4ee29e06882e6151']}})
我的尝试没有成功。任何人都可以帮助我将上述查询转换为等效的java代码。提前谢谢。
答案 0 :(得分:1)
这可以通过不同的迭代来完成,并为其添加过滤器。
` DistinctIterable<String> c = mongoDatabase.getCollection("sourceReference").distinct("sourceName",String.class).filter(new Document("sourceReferenceId",new Document("$in",sourceReferenceList)));
`
这里sourceReferenceList是一个包含所需过滤器值的数组列表。
答案 1 :(得分:0)
您可以使用和不使用不同查询来获取文档。
1)没有明确的查询: 只需使用HashSet过滤重复项。
List<String> list = new ArrayList<String>();
list.add('565555ef4ee29e068f61dd74');
list.add('565555ef4ee29e068f61dd73');
list.add('565555ef4ee29e06882e6151');
Bson filter = and(in("sourceReferenceId", list));
Bson projection = fields(include("sourceName"), excludeId());
Set<Document> all = mongoCollection.find(filter)
.projection(projection).into(new HashSet<Document>());
for (Document cur : all) {
System.out.println(cur);
}
这应该为您提供所需的输出。此处重复数据由应用程序而非数据库删除,但易于使用。
2)具有不同的查询:
MongoCursor<String> l1 = mongoCollection.distinct("sourceName",
String.class).iterator();
List<String> l3 = new ArrayList<String>();
try{
while(l1.hasNext()){
l3.add(l1.next());
}
}finally{
l1.close();
}
这将给出不同sourceName字段的列表。同样,您必须遍历使用投影获取的文档列表,并过滤查询,如第一种方法所示。
我不是一个优秀的程序员,如果你知道更好的方法,很高兴编辑这段代码。