多个字段的 CouchDB 搜索
CouchDB Search of Multiple Fields
我是第一次尝试使用 CouchDB 3.1。我正在尝试进行动态查询,其中可以搜索多个字段并且完全是可选的。我的数据示例:
{
"_id": "464e9db4d9216e1621b354794a0181d4",
"_rev": "1-fade491c3e255bbbfa60f1d7462fa9a2",
"app_id": "0000001",
"username": "john@gmail.com",
"transaction": "registration",
"customer_name": "John Doe",
"status": "complete",
"request_datetime": "2020-01-31 12:05:00"
}
所以我想做的是,可以通过“交易”、“交易”和“app_id”或字段“app_id”的组合来搜索文档/ “用户名”/“交易”/“用户名”/“状态”/“request_datetime”基于用户的搜索输入。 (根据“交易”,某些字段如“app_id”可能为空)
我尝试让视图通过“app_id”和“交易”进行搜索:
function (doc) {
if(doc.transaction && doc.app_id) {
emit([doc.transaction, doc.app_id], doc);
}
}
但是当 app_id 本身为 null 时,这将不起作用,因为 CouchDB 中的键是索引。
所以我的问题是这是否可以在不使用 GeoCouch 或 Lucene 的情况下使用 vanilla CouchDB 来实现?是否需要根据搜索字段的不同组合做出不同的视图?
非常感谢任何帮助。非常感谢。
与/db/_find, you can define a selector that accepts combination operators and condition operators。这使您可以创建简单和非常复杂的查询。鉴于您的文档结构,这样的选择器可能如下所示。
"selector":{
"$and":[
{
"app_id":{
"$eq":"0000001"
}
},
{
"username":{
"$eq":"john@gmail.com"
}
},
{
"request_datetime": {
"$gte": "2020-01-31 12:00:00",
"$lt": "2020-01-31 13:00:00"
}
}
]
}
$or
运算符与 $eq
和 $exists
结合使用可用于检查可以是 null
的字段。 $regex
运算符为您提供更多功能。
这是一个使用 CURL 的简单示例(替换为您的数据库名称)。
curl -H 'Content-Type: application/json' -X POST http://localhost:5984/<db>/_find -d '{"selector":{"username":{"$eq": "john@gmail.com"}}}'
我是第一次尝试使用 CouchDB 3.1。我正在尝试进行动态查询,其中可以搜索多个字段并且完全是可选的。我的数据示例:
{
"_id": "464e9db4d9216e1621b354794a0181d4",
"_rev": "1-fade491c3e255bbbfa60f1d7462fa9a2",
"app_id": "0000001",
"username": "john@gmail.com",
"transaction": "registration",
"customer_name": "John Doe",
"status": "complete",
"request_datetime": "2020-01-31 12:05:00"
}
所以我想做的是,可以通过“交易”、“交易”和“app_id”或字段“app_id”的组合来搜索文档/ “用户名”/“交易”/“用户名”/“状态”/“request_datetime”基于用户的搜索输入。 (根据“交易”,某些字段如“app_id”可能为空)
我尝试让视图通过“app_id”和“交易”进行搜索:
function (doc) {
if(doc.transaction && doc.app_id) {
emit([doc.transaction, doc.app_id], doc);
}
}
但是当 app_id 本身为 null 时,这将不起作用,因为 CouchDB 中的键是索引。
所以我的问题是这是否可以在不使用 GeoCouch 或 Lucene 的情况下使用 vanilla CouchDB 来实现?是否需要根据搜索字段的不同组合做出不同的视图?
非常感谢任何帮助。非常感谢。
与/db/_find, you can define a selector that accepts combination operators and condition operators。这使您可以创建简单和非常复杂的查询。鉴于您的文档结构,这样的选择器可能如下所示。
"selector":{
"$and":[
{
"app_id":{
"$eq":"0000001"
}
},
{
"username":{
"$eq":"john@gmail.com"
}
},
{
"request_datetime": {
"$gte": "2020-01-31 12:00:00",
"$lt": "2020-01-31 13:00:00"
}
}
]
}
$or
运算符与 $eq
和 $exists
结合使用可用于检查可以是 null
的字段。 $regex
运算符为您提供更多功能。
这是一个使用 CURL 的简单示例(替换为您的数据库名称)。
curl -H 'Content-Type: application/json' -X POST http://localhost:5984/<db>/_find -d '{"selector":{"username":{"$eq": "john@gmail.com"}}}'