如何仅使用mongo-java-driver执行MongoDB本机查询(JSON)? [英] How to execute MongoDB native query (JSON) using mongo-java-driver only?
本文介绍了如何仅使用mongo-java-driver执行MongoDB本机查询(JSON)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何仅使用java-mongo-driver触发mongo本机查询.
How to fire mongo native queries using java-mongo-driver only.
否 Spring-Data或EclipseLink或Hibernate OGM,仅使用 java-mongo-driver
No Spring-Data or EclipseLink or Hibernate OGM, Only using java-mongo-driver
示例查询:
db.orders.aggregate([
{
$unwind: "$specs"
},
{
$lookup:
{
from: "inventory",
localField: "specs",
foreignField: "size",
as: "inventory_docs"
}
},
{
$match: { "inventory_docs": { $ne: [] } }
}
])
推荐答案
我时间已用完,因此在解决方法中使用了它. 稍后将详细探讨Morcos的建议. 但是下面的代码也可以.
I was running out of time so used following workaround. Will explore Morcos suggestion in detail later. But following code also works.
import com.infrasoft.mongo.MongoClientFactory;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DB;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
/**
*
* @author charudatta.joshi
*/
public class TestNaiveQuery1 {
public static void main(String[] args) {
String nativeQuery = "db.orders.aggregate([\n"
+ " {\n"
+ " $unwind: \"$specs\"\n"
+ " },\n"
+ " {\n"
+ " $lookup:\n"
+ " {\n"
+ " from: \"inventory\",\n"
+ " localField: \"specs\",\n"
+ " foreignField: \"size\",\n"
+ " as: \"inventory_docs\"\n"
+ " }\n"
+ " },\n"
+ " {\n"
+ " $match: { \"inventory_docs\": { $ne: [] } }\n"
+ " }\n"
+ "])";
DBObject command = new BasicDBObject();
DB db = MongoClientFactory.getMongoClientFactory().getMongoClient().getDB("frms_data_demo");
nativeQuery = "function() { return (" + nativeQuery + ").toArray(); }";
//command.put("eval", "function() { return db." + collectionName + ".find(); }");
command.put("eval", nativeQuery);
CommandResult result = db.command(command);
BasicDBList dbObjList = (BasicDBList) result.toMap().get("retval");
DBObject dbo0 = (BasicDBObject) dbObjList.get(0);
DBObject dbo1 = (BasicDBObject) dbObjList.get(0);
System.out.println(dbObjList.get(0));
System.out.println(dbObjList.get(1));
// .... just loop on dbObjList
}
}
这篇关于如何仅使用mongo-java-driver执行MongoDB本机查询(JSON)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文