"date": "2016-1-17T2:3-6ren">
gpt4 book ai didi

mongodb - 从 Embedded Document Mongo Java 中获取值(value)

转载 作者:IT老高 更新时间:2023-10-28 13:22:04 25 4
gpt4 key购买 nike

我在 mongo 中有以下文档:

>  {    "_id": ObjectId("569afce4b932c542500143ec"),    
> "date": "2016-1-17T2:31:0Z",
> "day": NumberInt(17),
> "model1": {
> "date": "2016-01-17T02:31+0000",
> "MondayModel": {
> "gtxdotdot": {
> "xdotdot": 0,
> "xdot": 0
> },
> "lsxdotdot": {
> "xdotdot": 0,
> "xdot": 0
> },
> "gtxdot": {
> "xdotdot": 0,
> "xdot": 0
> },
> "lsxdot": {
> "xdotdot": 0,
> "xdot": 0
> },
> "modeldotdot": {
> "mean": 0,
> "sdvar": 0
> },
> "modeldot": {
> "mean": 0,
> "sdvar": 0
> }
> }
> }

我希望既能找到该文档,又希望只提取 model1.MondayModel.gtxdotdot.xdotdot/xdot/mean/sdvar ...

的值

我当前的代码使用以下代码:

MongoCursor<Document>  back = collection.find(and(eq("topic",topic),eq("sp",sp))).limit(1).iterator();
if (back.hasNext())
{
Document doc = back.next();
Document tmpddc1 = (Document)doc.get("model1");
Document tmpddc2 = (Document)tmpddc1.get("MondayModel");

Document tmpddc3 = (Document)tmpddc2.get("gtxdotdot");
gtxdotdotXdotdot = tmpddc3.getDouble("xdotdot");
gtxdotdotXdot = tmpddc3.getDouble("xdot");

tmpddc3 = (Document)tmpddc2.get("lsxdotdot");
lsxdotdotXdotdot = tmpddc3.getDouble("xdotdot");
lsxdotdotXdot = tmpddc3.getDouble("xdot");

tmpddc3 = (Document)tmpddc2.get("gtxdot");
gtxdotXdotdot = tmpddc3.getDouble("xdotdot");
gtxdotXdot = tmpddc3.getDouble("xdot");

tmpddc3 = (Document)tmpddc2.get("lsxdot");
lsxdotXdotdot = tmpddc3.getDouble("xdotdot");
lsxdotXdot = tmpddc3.getDouble("xdot");


tmpddc3 = (Document)tmpddc2.get("modeldotdot");
modeldotdotXmean = tmpddc3.getDouble("mean");
modeldotdotXsdvar = tmpddc3.getDouble("sdvar");

tmpddc3 = (Document)tmpddc2.get("modeldot");
modeldotXmean = tmpddc3.getDouble("mean");
modeldotXsdvar = tmpddc3.getDouble("sdvar");

}

有没有一种方法可以使用点符号 [model1.MondayModel.gtxdotdot.xdotdot] 来获取值,而不是思考他的文档(如上)?比如:

double value =  doc.getDouble("model1.MondayModel.gtxdotdot.xdotdot");

最佳答案

您可以选择以下三种方式之一。

您可以使用聚合框架使用点符号来投影嵌入字段的值。

使用聚合

 import static com.mongodb.client.model.Aggregates.*;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Projections.computed;
import static java.util.Arrays.*;
import static com.mongodb.client.model.Projections.include;

MongoClient mc = new MongoClient();
MongoDatabase db = mc.getDatabase("test");
MongoCollection<Document> collection = db.getCollection("collection");
Document document =
collection.aggregate(asList(
match(eq("day",17)),
project(computed("val", "$model1.MondayModel.gtxdotdot.xdotdot")))).
first();
Double embeddedField = document.getDouble("val");

使用不同的

 Double embeddedField = collection.distinct("model1.MondayModel.gtxdotdot.xdotdot", eq("day",17), Double.class).first();

使用查找

 Document document = collection.find(eq("day",17)).projection(include("model1.MondayModel.gtxdotdot.xdotdot")).first();
Double embeddedField = document.get("model1", Document.class).get("MondayModel", Document.class).get("gtxdotdot", Document.class).getDouble("xdotdot")

关于mongodb - 从 Embedded Document Mongo Java 中获取值(value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011625/

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