返回空结果的 Pouchdb 视图
Pouchdb view returning empty result
早上好,
我目前正在使用 Couchdb 和 Pouchdb,我在 Pouchdb 端遇到一个查询问题。
我有一个包含不同文档设置的数据库,如下所示:
{
"_id": "fd87b66087503d760fa501fa49029f94",
"_rev": "1-e2be19d447c98d624c2c8492eaf0a3f4",
"type": "product",
"name": "Blanc de Morgex et de la Salle Brut Extreme 2014",
"category": "Wine",
"subcategory": null,
"zone": "Italy",
"nation": "Valle d'Aosta",
"province": "Morgex, AO",
"cellar": "Cave Mont Blanc",
"price": 30,
"structure": null,
"year": 2014,
"mescita": null,
"tag": null
}
我写的查询应该 return 匹配某些过滤器的产品的可用年份。这是查询,reduce : _count
:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year != null) {
emit(doc.year , 1);
}
}
如果我尝试使用 Postman 添加 group = true
参数,一切正常,结果类似于:
{
"rows": [
{
"key": 2004,
"value": 2
},
{
"key": 2006,
"value": 2
},
{
"key": 2008,
"value": 2
}
]
}
问题是当我 运行 使用 Pouchdb 使用以下代码查看此视图时,其中 return 一个 JSON 具有一个空数组:
wine_db.query('wine_list/years', {reduce: '_count', key : "Bollicine", group : true, group_level: 2}).then(function(doc) {
years_list = doc;
console.log('getting year list');
console.log(doc);
}).catch(function(err){
console.log(err);
});
我尝试对函数的参数进行一些尝试,甚至将函数更改为 return 只是一个所有年份的列表,但是没有。
我找不到问题,也找不到不同的解决方案,所以我愿意接受你的每一个建议。
另一个解决方案(组结果)
根据@user3405291 建议的指示和解决方案,我终于找到了一种按年份对结果进行分组的方法。
由于 emit 函数 return 是一个复杂的键 ['CATEGORY', YEAR]
我可以使用 startkey 和 endkey 参数来查询结果只是索引的一部分 returned 保持这种方式 reduce 函数启用对结果进行分组。
最后的视图函数是:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit([doc.category, doc.year], doc.year );
}
}
和 Pouchdb 查询:
wine_db.query('wine_list/years',
{
startkey : ['CATEGORY'],
endkey : ['CATEGORY', {}],
group: true
}
).then(function (doc) {
years_list = doc;
console.log(years_list);
}).catch(function (err) {
console.log(err);
});
结果,其中值为具有该索引的元素总数:
{
"rows": [
{
"key": [
"Bollicine",
2004
],
"value": 2
},
{
"key": [
"Bollicine",
2006
],
"value": 2
},
{
"key": [
"Bollicine",
2008
],
"value": 2
}
]
}
在您的视图地图功能中,您 emit
年 为 key/index:
emit(doc.year , 1);
现在,我不确定您为什么要使用 {key : "Bollicine"}
:
这样的键进行查询
wine_db.query('wine_list/years', {key : "Bollicine"})
.then(res=>{console.log(res)})
当然你会得到一个空的响应,因为你的视图实际上是根据 year
索引你的文档。我认为您可能想要使用如下键进行查询:{key : "2014"}
更新
根据您的评论,我觉得您需要根据 year
和 category
查找文档。我不确定我是否理解你想要什么,但这可能会对你有所帮助:像这样更改你的视图地图功能:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit([doc.year, doc.category] , 1);
}
}
以上视图将根据年份 和类别 为您的文档编制索引。然后,您可以这样查询您的视图:
wine_db.query('wine_list/years', {key : ['2014', 'Bollicine']})
.then(res=>{console.log(res)})
以上查询将为您提供 year
字段等于 2014
且 category
字段等于 Bollicine
.
的所有文档
第二次更新
your code works, but I just get the result for the year 2014. What I'm trying to accomplish is to get all the available years given a specific category
一个解决方案是:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit(doc.category, doc.year);
}
}
以上视图将根据 category 作为键索引您的文档,并将 return year 作为值。因此你可以这样查询:
wine_db.query('wine_list/years', {key : 'Bollicine'})
.then(res=>{console.log(res)})
您应该会收到这样的回复,这样您就拥有了 Bollicine 类别的所有可用 年 :
{
"total_rows": 400,
"offset": 0,
"rows": [
{
"key": "Bollicine",
"value": "2014"
},
{
"key": "Bollicine",
"value": "2015"
},
{
"key": "Bollicine",
"value": "2018"
}
]
}
早上好, 我目前正在使用 Couchdb 和 Pouchdb,我在 Pouchdb 端遇到一个查询问题。
我有一个包含不同文档设置的数据库,如下所示:
{
"_id": "fd87b66087503d760fa501fa49029f94",
"_rev": "1-e2be19d447c98d624c2c8492eaf0a3f4",
"type": "product",
"name": "Blanc de Morgex et de la Salle Brut Extreme 2014",
"category": "Wine",
"subcategory": null,
"zone": "Italy",
"nation": "Valle d'Aosta",
"province": "Morgex, AO",
"cellar": "Cave Mont Blanc",
"price": 30,
"structure": null,
"year": 2014,
"mescita": null,
"tag": null
}
我写的查询应该 return 匹配某些过滤器的产品的可用年份。这是查询,reduce : _count
:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year != null) {
emit(doc.year , 1);
}
}
如果我尝试使用 Postman 添加 group = true
参数,一切正常,结果类似于:
{
"rows": [
{
"key": 2004,
"value": 2
},
{
"key": 2006,
"value": 2
},
{
"key": 2008,
"value": 2
}
]
}
问题是当我 运行 使用 Pouchdb 使用以下代码查看此视图时,其中 return 一个 JSON 具有一个空数组:
wine_db.query('wine_list/years', {reduce: '_count', key : "Bollicine", group : true, group_level: 2}).then(function(doc) {
years_list = doc;
console.log('getting year list');
console.log(doc);
}).catch(function(err){
console.log(err);
});
我尝试对函数的参数进行一些尝试,甚至将函数更改为 return 只是一个所有年份的列表,但是没有。 我找不到问题,也找不到不同的解决方案,所以我愿意接受你的每一个建议。
另一个解决方案(组结果)
根据@user3405291 建议的指示和解决方案,我终于找到了一种按年份对结果进行分组的方法。
由于 emit 函数 return 是一个复杂的键 ['CATEGORY', YEAR]
我可以使用 startkey 和 endkey 参数来查询结果只是索引的一部分 returned 保持这种方式 reduce 函数启用对结果进行分组。
最后的视图函数是:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit([doc.category, doc.year], doc.year );
}
}
和 Pouchdb 查询:
wine_db.query('wine_list/years',
{
startkey : ['CATEGORY'],
endkey : ['CATEGORY', {}],
group: true
}
).then(function (doc) {
years_list = doc;
console.log(years_list);
}).catch(function (err) {
console.log(err);
});
结果,其中值为具有该索引的元素总数:
{
"rows": [
{
"key": [
"Bollicine",
2004
],
"value": 2
},
{
"key": [
"Bollicine",
2006
],
"value": 2
},
{
"key": [
"Bollicine",
2008
],
"value": 2
}
]
}
在您的视图地图功能中,您 emit
年 为 key/index:
emit(doc.year , 1);
现在,我不确定您为什么要使用 {key : "Bollicine"}
:
wine_db.query('wine_list/years', {key : "Bollicine"})
.then(res=>{console.log(res)})
当然你会得到一个空的响应,因为你的视图实际上是根据 year
索引你的文档。我认为您可能想要使用如下键进行查询:{key : "2014"}
更新
根据您的评论,我觉得您需要根据 year
和 category
查找文档。我不确定我是否理解你想要什么,但这可能会对你有所帮助:像这样更改你的视图地图功能:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit([doc.year, doc.category] , 1);
}
}
以上视图将根据年份 和类别 为您的文档编制索引。然后,您可以这样查询您的视图:
wine_db.query('wine_list/years', {key : ['2014', 'Bollicine']})
.then(res=>{console.log(res)})
以上查询将为您提供 year
字段等于 2014
且 category
字段等于 Bollicine
.
第二次更新
your code works, but I just get the result for the year 2014. What I'm trying to accomplish is to get all the available years given a specific category
一个解决方案是:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit(doc.category, doc.year);
}
}
以上视图将根据 category 作为键索引您的文档,并将 return year 作为值。因此你可以这样查询:
wine_db.query('wine_list/years', {key : 'Bollicine'})
.then(res=>{console.log(res)})
您应该会收到这样的回复,这样您就拥有了 Bollicine 类别的所有可用 年 :
{
"total_rows": 400,
"offset": 0,
"rows": [
{
"key": "Bollicine",
"value": "2014"
},
{
"key": "Bollicine",
"value": "2015"
},
{
"key": "Bollicine",
"value": "2018"
}
]
}