如何使用$匹配“;及$或;java中的mongo聚合
我正在尝试使用聚合查询将匹配的文档加载到临时集合中。实际上,我能够将所有匹配的文档加载到MongoDB的临时集合中,但是我的java程序在for循环中抛出了Null指针异常 我完全被困在这里了。我可以知道这种情况下出现空指针异常的原因吗。谁能给我推荐一下同样的如何使用$匹配“;及$或;java中的mongo聚合,java,mongodb,mongodb-query,aggregation-framework,Java,Mongodb,Mongodb Query,Aggregation Framework,我正在尝试使用聚合查询将匹配的文档加载到临时集合中。实际上,我能够将所有匹配的文档加载到MongoDB的临时集合中,但是我的java程序在for循环中抛出了Null指针异常 我完全被困在这里了。我可以知道这种情况下出现空指针异常的原因吗。谁能给我推荐一下同样的 Document query = {"$or":[{"roll":1,"joiningDate":{"$gte":ISODate("2017-04-11T00:00:00Z")}},{"roll":2,"joiningDate":{"$
Document query = {"$or":[{"roll":1,"joiningDate":{"$gte":ISODate("2017-04-11T00:00:00Z")}},{"roll":2,"joiningDate":{"$gte": ISODate("2017-03-17T00:00:00Z")}}]};
Document match = new Document("$match",new Document("$or",query));
Document out =new Document("$out","TempCol");
System.out.println("Before Aggregation");
AggregateIterable<Document> resultAgg = collection.aggregate(Arrays.asList(match,out));
System.out.println("After aggregation");
for (Document doc : resultAgg){
System.out.println("The result of aggregation match:-");
}
System.out.println("Completed");
documentquery={“$or”:[{“roll”:1,“joiningDate”:{“$gte”:ISODate(“2017-04-11T00:00:00Z”)},{“roll”:2,“joiningDate”:{“$gte”:ISODate(“2017-03-17T00:00:00Z”)};
单据匹配=新单据(“$match”,新单据(“$or”,查询));
文件输出=新文件(“$out”,“TempCol”);
System.out.println(“聚合前”);
AggregateItableResultagg=collection.aggregate(Arrays.asList(match,out));
System.out.println(“聚合后”);
用于(文档文档:resultAgg){
System.out.println(“聚合匹配结果:-”);
}
系统输出打印项次(“完成”);
我通常更喜欢将管道结构保持在一个变量中
但这里的总体思路是使用文档
查看{}
和数组
List<Document> pipeline = Arrays.<Document>asList(
new Document("$match",
new Document("$or", Arrays.<Document>asList(
new Document("roll", 1)
.append("joiningDate", new Document(
"$gte", new DateTime(2017,04,11,0,0,0, DateTimeZone.UTC).toDate()
)),
new Document("controlId", 2)
.append("joiningDate", new Document(
"$gte", new DateTime(2017,03,17,0,0,0, DateTimeZone.UTC).toDate()
))
))
),
new Document("$out","TempCol")
);
AggregateIterable<Document> resultAgg = controlIssueCollection.aggregate(pipeline);
List pipeline=Arrays.asList(
新文档(“$match”,
新文档(“$or”,Arrays.asList)(
新文件(“卷”,1)
.附加(“合并日期”),新文件(
“$gte”,新的日期时间(2017,04,11,0,0,0,DateTimeZone.UTC)
)),
新文档(“controlId”,2)
.附加(“合并日期”),新文件(
“$gte”,新的日期时间(2017,03,17,0,0,0,DateTimeZone.UTC)
))
))
),
新文件(“$out”,“TempCol”)
);
AggregateItable resultAgg=controlIssueCollection.aggregate(管道);
另外,在使用您最喜欢的构造方法(对于我来说,org.joda.time.DateTime
)构造Date
对象时,请确保您使用的是UTC时间,除非您真的另有意思。如果您与存储在MongoDB中的值进行比较,如shell中所示,那么您指的是UTC