基于CouchDB中的属性获取文档(使用PHP和Cloudant)

时间:2012-11-04 12:40:11

标签: couchdb cloudant

是否可以根据该文档的属性检索文档?

如果电子邮件已经存在,我希望能够在注册时测试我的users吗?但在我看来,您只能通过_id ...

检索文档

我使用Cloudant作为使用CouchDB的云服务。

1 个答案:

答案 0 :(得分:2)

您可以使用电子邮件地址作为文档的ID,因此不能添加具有相同电子邮件的其他文档。您还可以使用CouchDB的基本功能view来检查插入前是否存在电子邮件。这两种方法都需要稍后conflict resolution。如果是第一种情况,则可能存在另一个具有尚未复制的冲突文档的Couch节点。在第二种情况下,两个用户可以将帐户添加到同一服务器,但两者都将首先检查现有的电子邮件,然后两者都将添加他们的帐户。

添加视图需要添加设计文档,其中包含计算视图的定义。您可以使用map函数创建索引,如下所示:

function (doc) {
  if (!doc.email) return;
  emit(doc.email, doc);
}

你可以query the view使用:

http://localhost:5984/YOUR_DTABASE/_design/YOUR_DESIGN_DOCUMENT/_view/YOUR_VIEW?key='e-mail@addre.ss'

请注意,电子邮件比较并不像您期望的那样微不足道:

  1. DNS域名(" @"之后)不区分大小写(用户名通常区分大小写)
  2. 在典型的电子邮件系统中,您可以指定别名。
  3. 某些电子邮件系统允许嵌入目标文件夹和更改电子邮件字符串但指向同一方框的其他信息(例如box+folder@domain.com)。
  4. Gmail忽略"。",因此First.Last@gmail.com等于FirstL.a.s.t@gmail.com