java - 在 MongoDB Java 中过滤文档或子文档中的数组
问题描述
我的 Java 代码:
MongoCollection<Document> coll = mongoClient.getDatabase(dbs.get(0)).getCollection(dbc.get(2));
Bson Myfilter=Filters.and(Filters.eq("id", "144-12"), Filters.gte("lastTimestamp",StartPeriod ),
Filters.lte("lastTimestamp", FinishTime));
FindIterable<Document> doc=coll.find(Myfilter).limit(5);
for (Document Document : doc) {
System.out.println(Document);
}
如需更多帮助,请使用相应的 Mongo Compass 屏幕截图来显示数据结构:
以及 Mongo Compass 的另一个屏幕截图,我已将 JSON 文档复制到红色矩形内:
{"_id":"5db06ab680bd68ca32a84c6e","disconnected":false,"id":"144-12","lastTimestamp":"1571842738588","manufacturer":"gmb","modelName":"GMB_Mod1","signals":[{"event":"changed","signal":"InjectionUnitCycleParametersType.DosingTime","stability":"unstable","timestamp":"1571842736566","type":"INTEGER","value":"0","writable":"read","written":false},{"event":"changed","signal":"InterfaceType.Jobs.ActiveJobValues.LastCycleTime","stability":"unstable","timestamp":"1571842736584","type":"INTEGER","value":"0","writable":"read","written":false}],"tC":10}
我想尝试将过滤器与数组字段和标量字段结合起来。例如在照片中,我想结合基于数组的“制造商”字段和“书面”字段的过滤器
解决方案
您的要求是检查字段signals
是否为数组且不为空。value
然后,从数组子文档元素中为所有数组元素打印一个字段 ( ) 值。
以下是如何实现的示例。我正在使用示例文档并打印fldA
值。以下 Java 代码具有数组检查:
{ _id: 1, arr: [ { fldA: 11, fldB: "str123"}, { fldA: 29, fldB: "strxyz"} ] },
{ _id: 2, arr: [ ] }
Java 代码:
MongoClient mongoClient = MongoClients.create("mongodb://localhost/");
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document>collection = database.getCollection("arrays");
Bson filterType = type("arr", "array");
Bson filterXpr = expr(Document.parse("{ $gt: [ { $size: '$arr' }, 0 ] }"));
List<Document> list = new ArrayList<>();
collection.find(and(filterType, filterXpr))
.limit(2)
.iterator()
.forEachRemaining(list::add);
for ( Document doc: list) {
List<Document> arr = (List<Document>) doc.get("arr");
arr.forEach(e -> System.out.println(e.get("fldA")));
}
输出:
11
29
笔记:
您可以MyFilter
使用Filters.and
.
// MongoDB Java driver imports
import org.bson.Document;
import org.bson.conversions.Bson;
import com.mongodb.client.*;
import static com.mongodb.client.model.Filters.*;
推荐阅读
- python - aio-pika 2 消费者不是在同一时间通过扇出接收消息
- html - 当我向下滚动网页时,如何确保我的下拉图标永远不会离开它的位置?
- wordpress - 从块数组中渲染块 - 古腾堡
- r - 将字符操作应用于单行代码中的一个列表
- java - 默认 Maven Java 项目中的 ClassNotFoundException
- javascript - 在reduce函数中使用函数参数:Javascript
- .net-core - Ocelot 使用“DangerousAcceptAnyServerCertificateValidator”禁用 SSL 验证
- reactjs - 如何将时间显示为 HH:MM 格式?
- java - Java中对Map的线程安全获取/清除操作的选择
- python - Change bind address on hug API