Couchdb使用nano,如何编写搜索查询

Couchdb使用nano,如何编写搜索查询,couchdb,couchdb-nano,Couchdb,Couchdb Nano,我在使用couchdb时遇到了问题。我正在nodejs中为此使用nano模块。如何实现类似搜索的用户名和密码匹配。我试过这个 body.rows.forEach(function(row) { if(row.doc._id==user_id && row.doc.password==password){ found = true; data = row; } }); 但这是一个缓慢的过程您的代码体.rows.forEach。。。是一个映射函数,它迭代每一

我在使用couchdb时遇到了问题。我正在nodejs中为此使用nano模块。如何实现类似搜索的用户名和密码匹配。我试过这个

body.rows.forEach(function(row) {
  if(row.doc._id==user_id && row.doc.password==password){
    found = true;
    data = row;
  }
});
但这是一个缓慢的过程

您的代码体.rows.forEach。。。是一个映射函数,它迭代每一行,每一行执行一个过滤函数ifrow.doc.\u id==user\u id。。。吵架。CouchDB视图就是这样做的——完全相同

但这是一个缓慢的过程

对。正因为如此,CouchDB创建了一个索引a B-Tree,它是CouchDB数据库目录中的一个文件,并使该索引保持最新。每个请求的性能优势在于,结果将取自已经准备好的索引,而不是像您的示例中那样的即时计算

CouchDB视图映射函数可能如下所示:

function(doc) {
  emit([doc._id,doc.password], null)
}
每行的键为[:username,:password],值为null。如果你要求

/:db/:ddoc/_view/:name?key=[":username",":password"]
你会马上得到那一排的。Append a&include_docs=true,您还可以将整个文档追加到行中,或者您可以将文档的一部分作为值而不是null发出

在CouchDB中处理用户帐户 用户帐户,尤其是密码是机密数据。CouchDB有内置的用户数据库。我不会详细介绍该数据库的访问控制细节,但我想说的是将用户帐户数据存储在那里!。如果您需要此数据库之外的帐户数据,则将该文档解释为公共配置文件,例如,让用户发现并相互连接

您的代码body.rows.forEach。。。是一个映射函数,它迭代每一行,每一行执行一个过滤函数ifrow.doc.\u id==user\u id。。。吵架。CouchDB视图就是这样做的——完全相同

但这是一个缓慢的过程

对。正因为如此,CouchDB创建了一个索引a B-Tree,它是CouchDB数据库目录中的一个文件,并使该索引保持最新。每个请求的性能优势在于,结果将取自已经准备好的索引,而不是像您的示例中那样的即时计算

CouchDB视图映射函数可能如下所示:

function(doc) {
  emit([doc._id,doc.password], null)
}
每行的键为[:username,:password],值为null。如果你要求

/:db/:ddoc/_view/:name?key=[":username",":password"]
你会马上得到那一排的。Append a&include_docs=true,您还可以将整个文档追加到行中,或者您可以将文档的一部分作为值而不是null发出

在CouchDB中处理用户帐户
用户帐户,尤其是密码是机密数据。CouchDB有内置的用户数据库。我不会详细介绍该数据库的访问控制细节,但我想说的是将用户帐户数据存储在那里!。如果您需要此数据库之外的帐户数据,则将该文档解释为公共配置文件,例如,让用户发现并相互连接

我在使用nano的coach db中找到了使用键值搜索的解决方案

首先,您必须创建设计文档并查看和实现 逻辑是这样的,然后使用它们

exports.testwhere = function (req, res) {
   var db = nano.use('ionic');
   db.insert({
      "views": {
         "by_email_and_password": {
            "map": function (doc) {
               emit([doc.email, doc.password], doc);
            }
         }
      }
   }, '_design/users', function (error, response) {
      console.log("yay");
   });
}


exports.testsearch = function (req, res) {
   var db =
      nano.use('ionic');
   db.view('users', 'by_email_and_password', {
      key: ["a@g.com", "aaa123"], include_docs: true
   }, function (err, res) {
      if (!err) {
         console.log("Result " + JSON.stringify(res));
      }
      else {
         console.log(err);
      }
   });
}

我找到了使用nano在coach数据库中使用键值进行搜索的解决方案

首先,您必须创建设计文档并查看和实现 逻辑是这样的,然后使用它们

exports.testwhere = function (req, res) {
   var db = nano.use('ionic');
   db.insert({
      "views": {
         "by_email_and_password": {
            "map": function (doc) {
               emit([doc.email, doc.password], doc);
            }
         }
      }
   }, '_design/users', function (error, response) {
      console.log("yay");
   });
}


exports.testsearch = function (req, res) {
   var db =
      nano.use('ionic');
   db.view('users', 'by_email_and_password', {
      key: ["a@g.com", "aaa123"], include_docs: true
   }, function (err, res) {
      if (!err) {
         console.log("Result " + JSON.stringify(res));
      }
      else {
         console.log(err);
      }
   });
}

只是一个安全提示:不要在数据库中存储纯文本密码。而是存储密码的散列值,例如MD5散列。然后还要对用户在其输入字段中提供的密码进行散列,并比较两个散列值。只是一个安全提示:不要在数据库中存储纯文本密码。而是存储密码的散列值,例如MD5散列。然后还要对用户在其输入字段中提供的密码进行散列,并比较两个散列值。