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

基于CouchDB中的属性获取文档(使用PHP和Cloudant),couchdb,cloudant,Couchdb,Cloudant,是否可以根据文档的属性检索该文档 我希望能够在注册时测试我的用户,看电子邮件是否已经存在?然而,在我看来,您只能通过\u id检索文档 我使用Cloudant作为云服务,它使用CouchDB。您可以使用电子邮件地址作为文档的id,因此无法添加具有相同电子邮件的其他文档。您还可以使用CouchDB的基本功能,即,在插入之前检查电子邮件是否存在。这两种方法都需要更晚的时间。如果是第一种情况,则可能有另一个coach节点具有尚未复制的冲突文档。在第二种情况下,两个用户可以将帐户添加到同一台服务器,但两

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

我希望能够在注册时测试我的
用户
,看电子邮件是否已经存在?然而,在我看来,您只能通过
\u id
检索文档


我使用Cloudant作为云服务,它使用CouchDB。

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

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

function (doc) {
  if (!doc.email) return;
  emit(doc.email, doc);
}
您可以使用:

请注意,电子邮件比较并不像您预期的那么简单:

  • DNS域名(在“@”之后)不区分大小写(用户名通常区分大小写)
  • 在典型的电子邮件系统中,您可以指定别名
  • 某些电子邮件系统允许嵌入目标文件夹和其他信息,这些信息会更改电子邮件字符串,但会指向同一个方框(例如,方框)+folder@domain.com)
  • Gmail忽略了这一点,所以首先。Last@gmail.com等于第一名。t@gmail.com

  • 另外,我意识到有一种方法可以获取数据库中的所有文档,但我不想获取所有文档并在可能的情况下循环使用它们。好的,我似乎需要使用JQuery库-这听起来可能很愚蠢,但我在任何地方都找不到-你有直接下载链接吗?你可以从its下载JQuery。这是否与CouchDB的问题有关,因为我不知道jQuery如何帮助您查询数据库?嗯,我想我把自己弄糊涂了。当使用映射函数时,是否确实要使用类似以下格式将文档存储到数据库中:{u id:“{u design/application”,“{u rev:“1-C1687D17”,“views:{”viewname:{“map:”function(doc){…}”,“reduce:“function(key,values){…},然后从地址:/database/\u design/application/\u view/viewname中读取它。实际上,该视图类似于SQL视图。它根据另一个“表”计算“表”。您可以使用一些函数创建设计文档。为数据库中的每个文档运行函数
    map
    。它发出的是新索引的一部分。使用此索引非常快,但它的功能比SQL视图少。映射结果也可能是使用reduce进行数据聚合的源。其他功能允许操作生成的格式、部分文档更新以及一些数据验证。它们是CouchDB的精髓。看看OK,我回到了绘图板上,详细阅读了CouchDB的工作原理,我有一个简单的系统,它可以很好地遵循您列出的电子邮件比较标准。你知道电子邮件上是否有其他标准的列表吗?
    http://localhost:5984/YOUR_DTABASE/_design/YOUR_DESIGN_DOCUMENT/_view/YOUR_VIEW?key='e-mail@addre.ss'