How do I retrieve particular List of element from MongoDB?
我想从mongodb表中检索元素的特定列表。
假设我在Employee类中有两个变量-:
现在,当我进行fetch查询时,它将类似于-:
1 | List<Employee> list=mongoTemplate.findAll(); |
然后我将循环访问每个Employee对象以获取Employee ID并保存在
现在,我想要的解决方案是这样的,我可以一次检索到所有ID。比如-:
1 | List<String> employeeId = someCodeHere; |
如果可以请帮忙
事先谢谢。
根据Mongos关于不同操作的参考文件:
Finds the distinct values for a specified field across a single collection or view and returns the results in an array.
在Spring Data MongoDB中,可以这样实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | DistinctIterable<String> distinctIds = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Employee.class)) .distinct("id", String.class); return Lists.newArrayList(distinctIds); // or BasicDBObject dbObject = new BasicDBObject(); dbObject.append("name", new BasicDBObject("$regex",".*and.*")); DistinctIterable<String> distinctIds = mongoTemplate.getCollection(mongoTemplate.getCollectionName(Employee.class)) .distinct("id", dbObject, String.class); return Lists.newArrayList(distinctIds); |
MongoTemplate在这里为distinct提供了一些重载。primer查询将直接收集员工集合条目的所有ID,而后者只对名称中包含
为了将iterable结果集转换为请求的字符串对象列表,可以使用guava的
正如@veeram在他的评论中提到的,您当然也可以使用像
1 2 3 4 | Query query = Query.query(Criteria.where(...)); query.fields().include("id"); return mongoTemplate.find(query, String.class); |
其中,
与
虽然@boris给出的答案在技术上也是有效的,但它可能会对性能产生一些影响,不幸的是,特别是当许多嵌入和引用的文档也需要检索时。因此,我不建议采用这种方法。
最后注意:在整个示例中,我保持了EDCOX1 1和EDCX1字段10小写字母的字段,因为这基本上是Java命名约定。
可以使用Java流API:
1 2 3 4 5 6 | private List<String> getEmployeeIds() { return mongoTemplate.findAll().stream() .map(Employee::getId) .filter(Objects::nonNull) .collect(toList()); } |
首先查询所有员工,然后转换为流,将
如果您的EDCOX1(2)使用Java流查询方法:
1 | Stream<Employee> findAll(); |
那么您不需要在
编辑:添加了从流中筛选空值