我正在构建一个Android应用程序,并使用MongoDB Atlas服务作为我的数据库。这是我第一次使用MongoDB,我对文档的弱点感到惊讶。
MongoDB要求我使用stitch客户端库与Atlas服务进行交互。我正在使用最新的'org.mongodb:stitch:0.1.0-SNAPSHOT'库他们执行FIND的示例/模式是这样的......
Document query = new Document()
.append("distinct","Restaurants")
.append("key","type");
我正在尝试执行here所述的“Distinct”命令。看起来我从Mongo获取信息的唯一方法是FIND方法,看起来我必须自定义查询的唯一方法是改变我构建的查询文档并随方法调用一起发送。如果我创建这样的查询文档......
TextGeometry
......它又回来了。我希望它能从该系列中返回一系列独特的餐厅类型(字符串)。
我或许可以使用管道,但是文档更缺乏Stitch库的文档。我已经在Stitch控制台中使用Debug控制台尝试了Find和Aggregate查询。它看起来像一个有用的调试工具,但它要求查询是JSON格式,并且我没有找到任何描述如何将查询格式化为他们想要的JSON模式的文档。
我希望有人能告诉我如何使用Stitch在MongoDB Atlas上完成“Distinct”MongoDB查询。
答案 0 :(得分:1)
经过一整天的调查之后,我发现了一些类似于解决方案的东西,至少它在管道中工作......我今晚稍后会检查它是否在使用Stitch客户端库的代码中工作
这是在Stitch Debug Console中运行的JSON:
{
"database": "<DATABASE>",
"collection": "<COLLECTION>",
"pipeline": [
{
"$group": {
"_id": "$category"
}
}
]
}
执行此操作会返回...
{
"result": [
{
"_id": "Category1"
},
{
"_id": "Category2"
}
]
}
它并不完美,因为我真的希望MongoDB返回一个字符串数组而不是一个对象数组。但正如here所述,它只是一种Map方法,所以我会接受它。
***编辑
好的,凌晨2点30分,但我终于得到了代码。我会把这里发布给其他试图做同样事情的人......
// the next 2 lines are the import part
List<Document> pipeline = new ArrayList<>();
pipeline.add(new Document("$group", new Document("_id","$category")));
Document args = new Document();
args.put("database", Statics.DB_NAME);
args.put("collection", DBCollections.POIS);
args.put("pipeline", pipeline);
mStitchClient.executePipeline(new PipelineStage("aggregate", Statics.SERVICE_NAME, args)).continueWith...(omitted)
这些都是BSON对象。棘手的部分是在文档中包含bson文档。