使用node.js函数在cloudant中创建搜索查询

时间:2015-04-15 20:22:28

标签: javascript node.js cloudant

如何在Node.js中创建一个可以在我的cloudant数据库中执行查询的函数,并返回包含特定值的匹配文档,其中包含具有特定值的特定键。 例如,假设以下是文档: -

{
  "_id": "23966717-5A6F-E581-AF79-BB55D6BBB613",
  "_rev": "1-96daf2e7c7c0c277d0a63c49b57919bc",
  "doc_name": "Markdown Reference",
  "body": "Lorem Ipsum",
  "ts": 1422358827
}

我想用ts字段中的值搜索此文档 如何在我的app.js文件中编写一个函数(语法),它将ts值作为输入,并返回包含类似ts值的所有文档。

2 个答案:

答案 0 :(得分:1)

  1. 在您的数据库上创建Cloudant Query索引,如下所示:

    curl -u $username:$password -X POST https://$username.cloudant.com/$databasename/_index -H "Content-Type:application/json" -d '{"index": {"fields": ["ts"]}}'
    
  2. 使您的数据库可公开阅读

  3. 这里是Node.js函数:

    #!/usr/bin/env node
    var request = require('request');
    var ts = process.argv[2];
    if (!ts) {
      console.log('Usage: app.js <ts>');
      process.exit(1);
    }
    query(ts);
    
    function query(tsval) {
      var cloudantquery = {
            "selector": {
              "ts": {"$eq": parseInt(tsval)}
            },
            "fields": ["_id","doc_name"]
      };
    
      request({
            method: 'POST', 
            uri: 'https://$username.cloudant.com/$databasename/_find', 
            json: true, 
            body: cloudantquery
      }, function (error, response, body) {
            if (!error && response.statusCode == 200) {
              console.log(body);
            }
      });
    }
    

答案 1 :(得分:0)

我遇到了类似的问题所以我使用了官方cloudant node module

使用后安装 $ npm install --save cloudant ,我写了一个简单的模块来查询我的cloudant数据库。

<强> cloudant.js

//Query
exports.couchQuery = function(query){
    var Cloudant=require('cloudant');
  var cloudant = Cloudant({url: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx', plugin:'promises'});
    var mydb = cloudant.db.use('xxxxxxxxxx');

    return mydb.find(query).then(res=>{
        return res;
    }).catch(err=>{
        return err;
    });
}

我使用了插件:&#39;承诺&#39;因为我更喜欢使用承诺而不是回调。

<强> routes.js

app.get("/query", function (req, res) {
        couchdb.couchQuery({
            "selector": {
                "type": "input",
                "_id": {
                    "$gt": 0
                }
            },
            "fields": [
                "name",
                "quantity"
            ],
            "sort": [
                {
                    "_id": "asc"
                }
            ]
        }).then(result => {
            if (result.docs) {
                res.send(result.docs);
            }
        })
    });

这对我有用。