Couchdb 用obj数组的键索引数据库
我在数据库中有数据,看起来是这样的,大约有20万条这样的记录Couchdb 用obj数组的键索引数据库,couchdb,pouchdb,Couchdb,Pouchdb,我在数据库中有数据,看起来是这样的,大约有20万条这样的记录 { "title": "blah blah blah", "authors": [ { "name": "Fudd, Elmer"}, { "name": "Duck, D."}, { "name": "Walker, Diana"}, { "name": "Washington, Grg,"} ], "description": "The
{
"title": "blah blah blah",
"authors": [
{ "name": "Fudd, Elmer"},
{ "name": "Duck, D."},
{ "name": "Walker, Diana"},
{ "name": "Washington, Grg,"}
],
"description": "The annals"
}
我希望能够成为一名查询作者
db.find({
"selector": {
"authors.name": {
"$regex": "^Wa"
}
},
"fields": ["_id", "title", "authors"]
}, function (err, result) {
if (err) { return console.log(err); }
console.log(result);
});
问题是,我就是不知道如何对作者进行索引。我尝试过很多变化,包括
const docsByAuthorName = function(doc) {
for (let element of doc.creators) {
emit(element.name, element);
}
};
let idx = {
fields: [{
"name": { "map": docsByCreatorName }
}],
ddoc: "authors",
name: "name",
type: "json"
};
db.createIndex({
index: idx
}, function (err, result) {
if (err) { return console.log(err); }
console.log(result)
});
但是我继续得到这样一个信息:没有索引,我应该为我的数据库编制索引以改进查询时间。我做错了什么
更新:我在上发现了一篇帖子,并按照那里的说明进行了操作
let idx = {
_id: '_design/authorsByName',
views: {
'authorsByName': {
map: function(doc) {
for (let element of doc.creators) {
emit(element.name);
}
}
}
}
};
db.put(idx).then(function (info) {
// design doc created
}).catch(function (err) {
// if err.name === 'conflict', then
// design doc already exists
});
当我运行查询时,我得到以下错误
SyntaxError: Unexpected token for
… <snip> …
The user's map/reduce function threw an uncaught error.
You can debug this error by doing:
myDatabase.on('error', function (err) { debugger; });
Please double-check your map/reduce function.
evalmachine.<anonymous>:34
};var log = function () {};var isArray = Array.isArray;var toJSON = JSON.parse;var __emitteds__ = [];var emit = function (key, value) {__emitteds__.push([key, value]);};var __result__ = (for (let element of doc.creators) {
^^^
SyntaxError:的意外令牌
… …
用户的map/reduce函数抛出了一个未捕获的错误。
您可以通过执行以下操作来调试此错误:
关于('error',函数(err){debugger;});
请仔细检查地图/缩小功能。
评估机:34
};var log=函数(){};var isArray=Array.isArray;var toJSON=JSON.parse;var uuu排放量uuu=[];var emit=函数(键,值){{uuuu emitteds_uuu.push([key,value]);};var\uuuu result\uuuu=(for(doc.creators的let元素){
^^^
因此,现在我不确定是否可以将常规JS放入一个包DBmap
function在更新的map函数中,进行以下更改:
//for (let element of doc.creators) {
for(var i=0, length=doc.creators.length; i<length; i++){
//emit(element.name);
emit(doc.creators[i], doc.title);
}
//for(doc.creators的let元素){
对于(变量i=0,长度=doc.creators.length;i