如何将查询写入我的 Cloudant 数据库?

How to write query to my Cloudant database?

我正在尝试为我的 NoSQL 数据库实现正确的查询,但我不知道如何在 Cloudant 中执行此操作。在 SQL 中

SELECT * FROM mydb
WHERE user_permit_doc_id = 10 
AND user_tracking_id = 1

我的查询是这样的:

https://293e2cb7-3561-4004-a1c3-58d54f517ee6-bluemix.cloudant.com/user_files/_design/user_tracking/_view/new-view?startkey=["user_permit_doc_id:10"]

它 returns 所有文档,而不仅仅是具有此 ID 的文档。

这是视图的 m Map Reduce 函数

function(doc) {
    if(doc.user_tracking_id !== null){
        emit(doc);
    }
}

我的文档数据库中的文档示例

{
  "_id": "6e57baa78c6415beeee788bc786cc53a",
  "_rev": "5-f15352bce99c307bd246bda4dc0da75a",
  "user_tracking_id": "1",
  "user_permit_id": "2",
  "user_permit_doc_id": "10",
  "user_id": "1",
  "_attachments": {
    "6y41j4i68cic.jpg": {
      "content_type": "image/jpeg",
      "revpos": 2,
      "digest": "md5-KC+G5tbz2UWZSzlPHvBy/Q==",
      "length": 68367,
      "stub": true
    }
  }
}

如果您只想 return 那个特定文档,则必须将 WHERE user_permit_doc_id = 10 合并到您的 map reduce 函数中,如下所示:

function(doc) {
   if(doc.user_permit_doc_id === 10 && doc.user_tracking_id === 1){
      emit(doc);
   }
}

但是,由于您是从 SQL 过来的,您可能更喜欢 Mongo 之类的查询。如果这种查询数据库的方式更适合您,请查看 Cloudant Mango API layer。 API 向 NoSQL 引入了类似于 SQL 的查询,实际上在幕后创建了一个 map reduce 函数。

您可以将视图更改为

function(doc) {
  if(doc.user_tracking_id !== null){
    emit([user_tracking_id, user_permit_doc_id]);
  }
}

然后使用复杂键 [1, 10]

进行查询