CouchDB中跨多种类型文档的复杂查询

时间:2019-06-13 06:53:00

标签: join couchdb cloudant

我对CouchDB相对较新(如果需要的话,更具体地说是Cloudant),而且我很难把头放在某些东西上。

假设以下(简化的)文档示例:

{ "docType": "school", "_id": "school1", "state": "CA" }
{ "docType": "teacher", "_id": "teacher1", "age": "40", "school": "school1" }

我想找到州$ state(例如CA)中所有年龄在$年龄(例如40岁)的老师。

2 个答案:

答案 0 :(得分:1)

视图一次只考虑一个文档;那就是查询不能直接合并来自不同文档的数据。您可以使用Cloudant Query跨同一文档中的多个字段进行查询。您可以直接在Cloudant仪表板中编写选择器。像

"selector": {
  "age": {
    "$gte": 40
  },
  "state": {
    "$eq": "CA"
  }
}

请参见https://cloud.ibm.com/docs/services/Cloudant/tutorials?topic=cloudant-creating-an-ibm-cloudant-query

此处有完整参考文献:https://cloud.ibm.com/docs/services/Cloudant/tutorials?topic=cloudant-query

您还可以使用所谓的链接文档来模拟基本联接,如CouchDB文档https://docs.couchdb.org/en/stable/ddocs/views/joins.html

所述

答案 1 :(得分:-1)

我还是Cloudant和NoSQL的新手,以前只使用关系数据库。据我了解,NoSQL中的文档等效于关系数据库中的行(但列可以不同)。我认为在您的示例中,您将文档视为表一样。

NoSQL数据库就像带有一个表的关系数据库。如果要交叉引用数据,则NoSQL数据库不是一个不错的选择。您可以将学校信息放入教师文档中,这将创建大量重复数据。如果要标准化的数据,最好使用关系数据库。

我是这个主题的新手,如果发现错误或没有帮助,请随时编辑或删除我的帖子。