Couchdb 用obj数组的键索引数据库

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

我在数据库中有数据,看起来是这样的,大约有20万条这样的记录

{
    "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放入一个包DB
map
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