Node.js 在Cloudant noSQL数据库中搜索多个参数
我使用Bluemix上的Cloudant数据库将产品存储在Node.js服务器中。这些产品将按类别进行搜索。要查找只有一个类别的产品,这不会是一个问题,因为搜索是通过比较作为搜索参数发送的字符串与保存在数据库中的类别字符串来进行的。当一个产品有两个或多个类别时,就会出现问题。在对字符串进行比较时,它永远不会重合 这些产品可以根据需要有任意多个类别Node.js 在Cloudant noSQL数据库中搜索多个参数,node.js,database,ibm-cloud,cloudant,Node.js,Database,Ibm Cloud,Cloudant,我使用Bluemix上的Cloudant数据库将产品存储在Node.js服务器中。这些产品将按类别进行搜索。要查找只有一个类别的产品,这不会是一个问题,因为搜索是通过比较作为搜索参数发送的字符串与保存在数据库中的类别字符串来进行的。当一个产品有两个或多个类别时,就会出现问题。在对字符串进行比较时,它永远不会重合 这些产品可以根据需要有任意多个类别 有什么想法吗?如果我正确理解了您的问题,您可能希望将类别存储为字符串数组,并为数组中的每个元素编制索引。然后,您可以根据单个或多个类别搜索产品 例如,
有什么想法吗?如果我正确理解了您的问题,您可能希望将
类别
存储为字符串数组,并为数组中的每个元素编制索引。然后,您可以根据单个或多个类别搜索产品
例如,给定以下文档:
文件1
{
"name": "product1",
"category: ["abc"]
}
文件2
{
"name": "product2",
"category: ["abc", "def"]
}
您可以设置类似以下内容的搜索索引:
function (doc) {
if (doc.category) {
for (var i in doc.category) {
index("category", doc.category[i], {"store": true, "facet": true})
}
}
}
然后,您可以运行如下查询:
../{dbname}/\u design/{designdocname}/\u search/{searchindexname}?q=category:abc
这将返回product1和product2
或:
../{dbname}/\u design/{designdocname}/\u search/{searchindexname}?q=category:abc+和+category:def
这将只返回product2
其他信息:您应该在Cloudant数据库中的“category”参数中以数组格式存储一个或多个类别
{
"_id": "producto1",
"category: ["TV", "cameras", "computers"]
}
然后您应该创建一个搜索索引
function (doc) {
if (doc.category) {
for (var i in doc.category) {
index("category", doc.category[i], {"store": true, "facet": true})
}
}
}
现在,您可以从Cloudant查询中查询文档
{
"selector": {
"_id": {
"$gt": 0
},
"category": {
"$all": [
"TV",
"cameras"
]
}
},
"fields": [
"_id",
"_rev"
],
"sort": [
{
"_id": "asc"
}
]
}
或者你可以使用
https://{url_database}/{name_database}/_design/{name_design}/_search/{name_search}?q=category:TV