如何在String中使用json执行聚合mongo查询?

时间:2016-07-31 16:00:20

标签: java json mongodb

我有一个字符串,其中包含mongodb的聚合json查询(从文件加载)。在robomongo,它运作良好。所以在robomongo,我有:

db.getCollection('Odds').aggregate(
[
{
     "$lookup": {
        "from": "...",
        "localField": "...",
        "foreignField": "...",
        "as": "..."
     }
},
{    "$unwind": "$..." },
{
     "$redact": {
         ... etc ...
     }
}
]
)

json文件是相同的,但删除了第一行和最后一行,以便它是json。当我在Java中加载它时,它正确解析。解析的结果恰好是" BasicDBList":

String query = "..."; // read from file
BasicDBList q = (BasicDBList) JSON.parse(query);

现在,我试图将其传递给聚合函数,但它不起作用:

new MongoClient().getDatabase("db").getCollection("coll").aggregate(q);

该行给出:

The method aggregate(List<? extends Bson>) in the type MongoCollection<Document> is not applicable for the arguments (BasicDBList)

有没有办法转换类型?我应该用另一种方式吗?

1 个答案:

答案 0 :(得分:1)

离解决方案不远:

聚合函数需要:.aggregate(List<DBObject>) 但是如果你的查询中有一个列表,那么你想要使用的JSON.parse允许你对其进行类型转换,所以没有问题

String query="[....}";
List<DBObject> q= (List<DBObject>)JSON.parse(query);
Iterable<DBObject> result=new MongoClient().getDatabase("db").getCollection("coll").aggregate(q).results();`

结果可以迭代。