我的问题是从MongoDB Java驱动程序查询配置返回的类型。
我正在执行一个查询,它将从MongoDB返回多个对象。我正在使用MongoDB Java驱动程序,如下所示:
DBCollection collection = ...;
DBObject query = new DBObject("someField", "someValue");
collection.find(query);
这会返回DBCursor
,它可以遍历一组DBObjects
。由于我想返回原始JSON,因此我遍历每个对象并使用StringBuilder
将结果聚合为单个String(使用DBObject.toString()
)。这虽然解决了其他问题,因为转义字符包含在最终结果中。
举个例子,假设我在DB中有两条记录:
{
someField : "someValue"
},
{
someField : "someOtherValue"
}
获得DBCursor
并使用StringBuilder
构建字符串后,最终结果是:
String s = "{ someField : \"someValue\" }, { someField : \"someOtherValue\" }";
我理想的解决方案是返回单个DBObject
并调用其.toString()
方法,或者(甚至更理想)只是从Mongo中获取原始线索。
与往常一样,任何想法或建议都将不胜感激。
感谢。
编辑 - 回答,谢谢Mzzl
private class SingleStringCollectionCallback implements CollectionCallback {
private final DBObject dbo = new BasicDBObject("someField", "someValue");
private final DBObject match = new BasicDBObject("$match", dbo);
public Object doInCollection(DBCollection collection) throws MongoException, DataAccessException {
AggregationOutput ao = collection.aggregate(match);
/** CommandResult contains the results list (as a BasicDBList) in its "result" field. */
return ao.getCommandResult().get("result");
}
}
mongoTemplate.execute(COLLECTION_NAME, new SingleStringCollectionCallback());
BasicDBList.toString()
方法将列表序列化为单个JSON字符串。请注意,您应该让您选择的JSON序列化程序处理toString()
调用,并将其传递给BasicDBList
。否则,您可能会在最终结果中找到转义字符("{ someField : \"someValue\" }"
)。
答案 0 :(得分:2)
汇总框架的查询结果是单个文档。也许您可以重写查询以使用aggregate?在'someField:someValue}的$ match之后,'_id'可能是$ group?