如何仅使用mongo-java-driver执行MongoDB本机查询(JSON)? [英] How to execute MongoDB native query (JSON) using mongo-java-driver only?

查看:117
本文介绍了如何仅使用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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆