Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用子节点查询MongoDB_Java_Mongodb_Child Nodes - Fatal编程技术网

如何在Java中使用子节点查询MongoDB

如何在Java中使用子节点查询MongoDB,java,mongodb,child-nodes,Java,Mongodb,Child Nodes,我正在尝试用java查询mongodb。我收藏的名字是:reads。下面是我要查询的特定文档的示例: { "_id" : { "d" : "B66929932", "r" : "15500304", "eT" : ISODate("2014-09-29T12:03:00Z") }, "v" : 169000, "iT" : ISODate("2015-04-10T20:42:07.577Z") } 我试图查询r=15500304,eT=2014-09-29T12:03:

我正在尝试用java查询mongodb。我收藏的名字是:reads。下面是我要查询的特定文档的示例:

{
"_id" : {
    "d" : "B66929932",
    "r" : "15500304",
    "eT" : ISODate("2014-09-29T12:03:00Z")
},
"v" : 169000,
"iT" : ISODate("2015-04-10T20:42:07.577Z")
}

我试图查询r=15500304,eT=2014-09-29T12:03:00Z和v=169000的位置。我在mongo很容易做到这一点:

db.reads.find({ "_id.r" : "15500304", "_id.eT" : ISODate("2014-09-29T12:03:00Z"), "$where" : "this.v == 169000;"}).pretty()
我不知道如何在java中构造它。到目前为止,我已经:

DBCollection collection = db.getCollection("reads");
BasicDBObject andQuery = new BasicDBObject();
List<BasicDBObject> obj = new ArrayList<BasicDBObject>();

obj.add(new BasicDBObject("_id.r", "15500304"));
obj.add(new BasicDBObject("_id.eT", "2014-09-29T12:03:00Z"));
obj.add(new BasicDBObject("v", 169000));
andQuery.put("$and", obj);

DBCursor cursor = collection.find(andQuery);
    while(cursor.hasNext()){
        System.out.println(cursor.next());
    }
DBCollection-collection=db.getCollection(“读取”);
BasicDBObject和Query=新的BasicDBObject();
List obj=new ArrayList();
对象添加(新的基本对象(“id.r”、“15500304”);
对象添加(新的基本对象(“id.eT”,“2014-09-29T12:03:00Z”);
增加目标(新的基本目标(“v”,169000));
andQuery.put(“$and”,obj);
DBCursor=collection.find(andQuery);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
我的问题是:如何使用这些子节点进行查询并返回匹配的文档


我在网上找不到任何明确的建议/例子。非常感谢您的任何建议。

您很接近。将查询修改为:

DBCollection collection = db.getCollection("reads");
BasicDBObject query = new BasicDBObject();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
String dateInString = "2014-09-29T12:03:00Z";
Date date = df.parse(dateInString);

query.append("status.name", "Expired")
     .append("_id.eT", date)
     .append("v", 169000);
或使用

DBObject query = QueryBuilder.start()
                         .put("_id.r").is("15500304")
                         .put("_id.eT").is(date)
                         .put("v").is(169000)
                         .get();

DBCursor cursor = collection.find(query);
while(cursor.hasNext()){
    System.out.println(cursor.next());
}

谢谢你的回复。我尝试了这两个例子,我得到了一个非法参数异常,因为它无法解析日期。IntelliJ还告诉我新的日期(字符串str)是deprecated@jdub7我已经更新了我的答案,你能告诉我怎么做吗,因为我还没有尝试过。@chridam这是离题的,但你昨天的答案是我想要的,因为我使用的是spring驱动程序,我无法进行concat,所以你的答案给出了三个不同的值,我可以用java来描述它。Thanks@Rnet感谢您的反馈,我将取消删除答案,以便其他具有相同问题的人可能会发现它有用。干杯@chridam证明你的代码有效。问题是我的查询使用的日期的时区是我机器的时区,即EST。我必须用UTC硬编码,而且它很有效。我讨厌约会!再次感谢您的帮助!