使用 node.js 函数在 cloudant 中创建搜索查询
Creating a search query in cloudant using node.js functions
我如何在 Node.js 中创建一个可以在我的 cloudant 数据库中执行查询的函数,并 return 我如何匹配包含具有特定值的特定键的文档。
例如,假设以下是文档:-
{
"_id": "23966717-5A6F-E581-AF79-BB55D6BBB613",
"_rev": "1-96daf2e7c7c0c277d0a63c49b57919bc",
"doc_name": "Markdown Reference",
"body": "Lorem Ipsum",
"ts": 1422358827
}
并且我想用它在 ts 字段中的值来搜索这个文档
我如何在我的 app.js 文件中编写一个函数(语法),它将 ts 值作为输入,并 return 我所有包含相似 ts 值的文档。
像这样在您的数据库上创建一个 Cloudant 查询索引:
curl -u $username:$password -X POST https://$username.cloudant.com/$databasename/_index -H "Content-Type:application/json" -d '{"index": {"fields": ["ts"]}}'
使您的数据库公开可读
这是 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);
}
});
}
我遇到了类似的问题,所以我使用了官方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;
});
}
我使用了插件:'promises' 因为我更喜欢使用承诺而不是回调。
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);
}
})
});
这对我有用。
我如何在 Node.js 中创建一个可以在我的 cloudant 数据库中执行查询的函数,并 return 我如何匹配包含具有特定值的特定键的文档。 例如,假设以下是文档:-
{
"_id": "23966717-5A6F-E581-AF79-BB55D6BBB613",
"_rev": "1-96daf2e7c7c0c277d0a63c49b57919bc",
"doc_name": "Markdown Reference",
"body": "Lorem Ipsum",
"ts": 1422358827
}
并且我想用它在 ts 字段中的值来搜索这个文档 我如何在我的 app.js 文件中编写一个函数(语法),它将 ts 值作为输入,并 return 我所有包含相似 ts 值的文档。
像这样在您的数据库上创建一个 Cloudant 查询索引:
curl -u $username:$password -X POST https://$username.cloudant.com/$databasename/_index -H "Content-Type:application/json" -d '{"index": {"fields": ["ts"]}}'
使您的数据库公开可读
这是 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); } }); }
我遇到了类似的问题,所以我使用了官方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;
});
}
我使用了插件:'promises' 因为我更喜欢使用承诺而不是回调。
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);
}
})
});
这对我有用。