java - 如何使用java查询mongodb
问题描述
db.FNTeams.aggregate([ { "$unwind": "$mailIDs" },{ "$lookup": {"from":
"FNContacts", "localField": "mailIDs", "foreignField": "_id", "as":
"productObjects" }}, { "$group": { "_id": "$_id", "mailIDs": { "$push":
"$mailIDs" }, "UserID":{"$push":"$UserID"},"TeamName":
{"$push":"$TeamName"},"productObjects": { "$push": "$productObjects" }}}])
如何在java中查询上面的查询,我试过用下面的代码
DBCollection collection = db.getCollection("FNActivity");
DBObject unwind1 = new BasicDBObject("$unwind", "$mailIDs");
DBObject lookup = new BasicDBObject("$lookup", new BasicDBObject("from",
"FNContacts")
.append("localField", "mailIDs").append("foreignField",
"_id").append("as", "mailWithID"));
BasicDBObject pushField = new BasicDBObject();
pushField.append("_id", "$_id");
pushField.append("UserID", new BasicDBObject("$push", "$UserID"));
pushField.append("TeamName", new BasicDBObject("$push", "$TeamName"));
pushField.append("TeamDesc", new BasicDBObject("$push", "$TeamDesc"));
pushField.append("Status", new BasicDBObject("$push", "$Status"));
pushField.append("MailWithID", new BasicDBObject("$push",
"$mailWithID"));
DBObject group = new BasicDBObject("$group", pushField);
AggregationOutput output = collection.aggregate(Arrays.asList(group,
lookup, unwind1));
但我的输出是空的。上面的查询给出了在 cmd 中运行时我想要的确切输出。
解决方案
您可以使用此链接中指定的 AggregationOperation 类
像这样的东西:
public static void checkMongoOperations(){
ApplicationContext ctx = new AnnotationConfigApplicationContext(MongoConfig.class);
MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");
AggregationOperation match = Aggregation.match(Criteria.where("country").is("tiro"));
AggregationOperation unwind = Aggregation.unwind("myDetails");
AggregationOperation match2 = Aggregation.match(Criteria.where("myDetails.type").is("health"));
AggregationOperation sort = Aggregation.sort(Sort.Direction.ASC, "myDetails.datetime");
AggregationOperation limit = Aggregation.limit(1);
Aggregation aggregation = Aggregation.newAggregation(match, unwind, match2, sort, limit);
System.out.println("Aggregation = "+aggregation);
AggregationResults<AggregateFactoryResult> output = mongoOperation.aggregate(aggregation, "gui_data", AggregateFactoryResult.class);
System.out.println("output = "+output.getMappedResults().get(0).getCountry());
}
推荐阅读
- javascript - 如何让我的计算器在输入数字前默认显示“0”?另外如何添加键盘输入功能?香草JS
- android-studio - 在 Dart/Flutter/AndroidStudio 中为 Webview 使用 SafeArea
- postgresql - 如何从 postgresql 下载数据
- html - Oxwall - 删除元标记
- reactjs - 如何在 react-redux 中使用 Partial 来增加类型
- sql - Postgres 聚合与案例
- django - How to save model data using custom button instead of using Save button in Django admin
- javascript - Get id from array of id's for a button when i click it
- azure - How do you automate an application registration in Azure AD alongside permissions?
- javascript - Can anyone please tell me why an object's function expression makes use of 'this' keyword to access the object's member variables?