【问题标题】:Get values from array in inner document in mongodb从MongoDB内部文档中的数组获取值
【发布时间】:2014-03-13 15:30:42
【问题描述】:

如何从 mongodb 的内部文档中获取字段?例如,如果我提供一个名为“idMovie”的字段,我将获得与此 idMovie 对应的其余字段。

我正在使用此代码:

        MongoClient mongo = null;
        DBCursor cursor = null;
        String average = "";
        String sum = "";
        String numCal = "";

        try {
            mongo = new MongoClient ("localhost", 27017);
            DB db = mongo.getDB("DBHC2");

            DBCollection movieDocument = db.getCollection("movies");
            BasicDBObject searchQuery = new BasicDBObject();
            searchQuery.put("rateMovies.idMovie", idMovie);
            cursor = movieDocument.find(searchQuery);

            if(cursor.hasNext()){

                average = searchQuery.getString("average");
                sum     = searchQuery.getString("sum");
                numCal  = searchQuery.getString("total");

                System.out.println("***** Debug: average: "+average+" sum: "+sum+" total: "+numCal);    
            }           
        }
        catch(Exception e){ 
            System.out.println("error : " + e.getMessage());
            System.out.println("error : " + e.getCause());
        }
        finally{
            cursor.close();
        }
    }

当我运行它时,控制台会打印:

***** Debug: average: null sum: null total: null

这是我正在使用的 mongodb 文档:

{ "_id" : { "$oid" : "5320aa3c3e468eaeb52dccdc"}, 
   "document" : "movies" , 
   "rateMovies" : [ 
        { 
         "idMovie" : 2 , 
         "average" : "0" , 
         "sum" : "0" , 
         "total" : "0"
        } , 

       { 
         "idMovie" : 3 ,
         "average" : "0" ,
         "sum" : "0" , 
         "total" : "0"
       }]
  } 

提前谢谢你!! :) 对不起我的英语。

【问题讨论】:

    标签: java mongodb mongodb-java nosql


    【解决方案1】:

    您正在尝试从传入的查询对象中提取数据,而不是从通过游标返回的 DBObjects 中提取数据。

    【讨论】:

    • 我正在尝试这样做,但没有成功:if(cursor.hasNext()){ DBObject resultElement = cursor.next(); average = (String) resultElement.get("average"); id = (String) resultElement.get("idMovie"); sum = (String) resultElement.get("sum"); numCal = (String) resultElement.get("total");
    • 你需要类似的东西: DBObject resultElement = cursor.next(); List list = (List)resultElement.get("rateMovies"); // 遍历这个列表来拉取你的平均值
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 2018-07-30
    • 1970-01-01
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多