繁体   English   中英

从mongodb对象 - Java驱动程序返回属性

[英]Return attributes from mongodb object- Java driver

我有mongo对象喜欢

{
        "name" : "mongo",
        "values" : [
            {
                    "date" : "02-23-2015",
                    "price" : "5"
            },
            {
                    "date" : "02-23-15",
                    "price" : "6"
            },
            {
                    "date" : "02-22-15",
                    "price" : "7"
            }
    ]
}

我正在使用Java驱动程序,我能够使用如下查询提取此对象:

QueryBuilder builder = new QueryBuilder();
DBObject nameQuery = new BasicDBObject("name", "mongo");
builder.and(nameQuery);
DBObject fullQuery = builder.get();

然而我想要的是提取所有的价格值,我想将它们存储在一个数组中 - 现在我只能返回整个对象..通过像这样的子集在文档中没有很好地解释,一个例子会有所帮助。

任何帮助,将不胜感激。

编辑:好了,我现在可以遍历这个数组中的对象,但它没有利用mongo内置的ins,自然会慢一些:

while (curs.hasNext())
    {
        DBObject o = curs.next();
        BasicDBList values = (BasicDBList) o.get("values");
        BasicDBObject[] valuesArray = values.toArray(new BasicDBObject[0]);
        for(BasicDBObject dbObj : valuesArray) {
            name = dbObj.getString("name");
         }
    }

这允许我提取我想要的任何东西,但我知道有一种更有效的方法。 任何帮助都会很棒,谢谢

我认为它应该工作或它可以带你接近解决方案:

    DB db = this.getConnection();
    DBCollection coll = db.getCollection(collection);
    BasicDBObject searchQuery = new BasicDBObject();
    searchQuery.put("name", "mongo");

    cursor = coll.find(searchQuery);

    DBObject resultElement = null;
    List <String> prices = new ArrayList<String>(); 

    while(cursor.hasNext()){
            resultElement = cursor.next();
            prices.add ((String) resultElement.get("values.price"));
    }

希望能帮助到你。

DBCollection.find()方法接受一个名为keys的第二个参数,它允许您定义应该在结果中包含哪些字段。 像这样使用它:

collection.find(query, new DBObject("values.price":1);

这将返回一个文档,其值数组仅包含如下价格:

{
    "values" : [
        {
                "price" : "5"
        },
        {
                "price" : "6"
        },
        {
                "price" : "7"
        }
]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM