【问题标题】:How to perform a "Distinct" MongoDB query on MongoDB Atlas using Stitch如何使用 Stitch 在 MongoDB Atlas 上执行“不同的”MongoDB 查询
【发布时间】:2017-10-24 21:01:56
【问题描述】:

我正在构建一个 Android 应用,并使用 MongoDB Atlas 服务作为我的数据库。这是我第一次使用 MongoDB,我对文档的薄弱程度感到惊讶。

MongoDB 要求我使用缝合客户端库与 Atlas 服务交互。我正在使用最新的 'org.mongodb:stitch:0.1.0-SNAPSHOT' 库他们执行 FIND 的示例/模式是这样的......

 Document query = new Document()
            .append(Review.Field.RESTAURANT_ID, restaurant.getId())
            .append(Review.Field.OWNER_ID, getUserId());

   getDatabase().getCollection(DBCollections.REVIEWS_RATINGS).find(query).continueWith...

我正在尝试按照here 的描述执行“不同”命令。看起来我从 Mongo 获取信息的唯一方法是 FIND 方法,看起来我必须自定义查询的唯一方法是更改​​我构建并与方法调用一起发送的查询文档。如果我创建这样的查询文档...

 Document query = new Document()
            .append("distinct","Restaurants")
            .append("key","type");

...它返回空白。我希望它从该集合中返回一组独特的餐厅类型(字符串)。

我也许可以使用管道,但该文档比 Stitch 库的文档更缺乏。我已经使用 Stitch 控制台中的 Debug 控制台尝试了 Find 和 Aggregate 查询。它看起来像是一个有用的调试工具,但它要求查询采用 JSON 格式,而且我还没有找到任何描述如何将查询格式化为他们想要的 JSON 模式的文档。

我希望有人能告诉我如何使用 Stitch 在 MongoDB Atlas 上完成“不同”的 MongoDB 查询。

【问题讨论】:

  • 请注意,截至本问题,Stitch 目前处于 Beta 版,它的某些方面可能不一定能保留到最终版本,甚至没有正确记录。您可以将 MongoDB Atlas 用作数据库即服务,其中数据库本身及其各种驱动程序的文档非常丰富。
  • 另外,您所指的distinct 手册页是针对Aggregation Pipeline 的。如果你不熟悉这些术语,我建议你先在university.mongodb.com注册一些免费的 MongoDB 大学课程@
  • 正如我上面提到的,我知道我是 MongoDB 的新手,这就是我寻求 SO 指导的原因。我很欣赏到 university.mongodb.com 的链接。我以前没见过,有些课程看起来很有趣。我去看看。

标签: android mongodb


【解决方案1】:

经过一整天的调查,我做了一些类似于解决方案的事情,至少它在管道中工作......我今晚晚些时候会检查它是否在使用 Stitch 客户端库的代码中工作。

这是在 Stitch 调试控制台中工作的 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 文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-15
    • 2018-10-02
    • 1970-01-01
    • 2021-11-26
    • 2019-08-31
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多