我有一个字符串,其中包含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)
有没有办法转换类型?我应该用另一种方式吗?
答案 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();`
结果可以迭代。