gpt4 book ai didi

java - Mongodb 和 Java 读取嵌套文档值

转载 作者:行者123 更新时间:2023-11-29 05:30:03 25 4
gpt4 key购买 nike

我的 mongo 集合包含以下文档

{

"syslog": [
{
"alertId": "N/A",
"time": "06:46:57",
"device": "10.10.20.1"
},
{
"alertId": "N/A",
"time": "06:47:30",
"device": "10.10.20.2"
}
]
}

现在我只想读取给定设备的值。

假设如果我设置 device="10.10.20.2"它只会显示 "alertId": "N/A",
“时间”:“06:47:30”,
"device": "10.10.20.2"
为此我编写了如下 java 代码

BasicDBObject criteria = new BasicDBObject();                                       

criteria.put("syslog.device","10.10.20.2");
DBCursor cur = coll.find(criteria);
while(cur.hasNext() && !isStopped()) {
String json = cur.next().toString();
}//end of while

当我打印 json 时,它会显示整个 json 值。我应该如何只找到给定设备的选定值?

最佳答案

你应该使用 $elemMatch运算符投影数组字段。您应该按如下方式更新您的查询:

db.collection.find({"syslog.device" : "10.10.20.2"},{syslog : {$elemMatch : {device : "10.10.20.2"}}})

在 Java 中:

BasicDBObject criteria = new BasicDBObject();                                       
criteria.put("syslog.device","10.10.20.2");

BasicDBObject elemMatchObj = new BasicDBObject();
elemMatchObj.put("$elemMatch", new BasicDBObject("device", "10.10.20.2"));

DBCursor cur = coll.find(criteria, new BasicDBObject("syslog", elemMatchObj));
while(cur.hasNext() && !isStopped()) {
String json = cur.next().toString();
}//end of while

关于java - Mongodb 和 Java 读取嵌套文档值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21431399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com