java mongodb tolist_关于java:如何从MongoDB中检索特定的元素列表?

我想从mongodb表中检索元素的特定列表。

假设我在Employee类中有两个变量-:

public Class Employee

{

private String Id;

private String Name;

.

.

现在,当我进行fetch查询时,它将类似于-:

List list=mongoTemplate.findAll();

然后我将循环访问每个Employee对象以获取Employee ID并保存在List中。

现在,我想要的解决方案是这样的,我可以一次检索到所有ID。比如-:

List employeeId = someCodeHere;

如果可以请帮忙

事先谢谢。

在Query query = new Query(); query.fields().include("Id"); ListemployeeIds = mongoTemplate.find(query , String.class);

谢谢你的回复,veeram……"

根据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中,可以这样实现:

DistinctIterable 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 distinctIds =

mongoTemplate.getCollection(mongoTemplate.getCollectionName(Employee.class))

.distinct("id", dbObject, String.class);

return Lists.newArrayList(distinctIds);

MongoTemplate在这里为distinct提供了一些重载。primer查询将直接收集员工集合条目的所有ID,而后者只对名称中包含and的员工ID进行筛选。

为了将iterable结果集转换为请求的字符串对象列表,可以使用guava的newArray(...)功能。

正如@veeram在他的评论中提到的,您当然也可以使用像

Query query = Query.query(Criteria.where(...));

query.fields().include("id");

return mongoTemplate.find(query, String.class);

其中,query.fields().include("id")用于指定您实际感兴趣的字段。

与distinct相比,此方法将在结果列表中包含重复条目(如果有)。虽然ID通常应该是唯一的,但是对名称执行这两个查询可能会产生包含多个相同条目的结果。

虽然@boris给出的答案在技术上也是有效的,但它可能会对性能产生一些影响,不幸的是,特别是当许多嵌入和引用的文档也需要检索时。因此,我不建议采用这种方法。

最后注意:在整个示例中,我保持了EDCOX1 1和EDCX1字段10小写字母的字段,因为这基本上是Java命名约定。

谢谢@roman的回复

可以使用Java流API:

private List getEmployeeIds() {

return mongoTemplate.findAll().stream()

.map(Employee::getId)

.filter(Objects::nonNull)

.collect(toList());

}

首先查询所有员工,然后转换为流,将Employee映射到Id,然后将所有非空值聚合到列表中。

如果您的EDCOX1(2)使用Java流查询方法:

Stream findAll();

那么您不需要在getEmployeeIds()中调用stream()方法。

编辑:添加了从流中筛选空值

谢谢鲍里斯的回复

你能告诉我如何确保空值没有添加到我们的列表中吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值