Indexing Pouch db多维文档

时间:2018-03-30 13:06:32

标签: javascript pouchdb

寻找索引pouchDB的方法

当我有多个维度

时找不到索引的方法

这是我的文档客户端示例

请注意,客户可能会有一些发票

{
    clientId : 2
    clientName : 'toto'
    phoneNumber : '2342342'
    invoices : [
        {
            invoiceNumber : '12312313' , 
            Amount : 234242, 
            barCode : '1234324', 
        },  
        {
            invoiceNumber : '12312313' , 
            Amount : 234242, 
            barCode : '1234324', 
        }
    ]
}
{
    clientId : 3
    clientName : 'tata'
    phoneNumber : '2342342'
    invoices : [
        {
            invoiceNumber : '3542435' , 
            Amount : 234242, 
            barCode : '1234324', 
        },  
        {
            invoiceNumber : '235423' , 
            Amount : 234242, 
            barCode : '23454235', 
        }
    ]
}

我希望能够按发票编号和条形码编号找到客户

所以索引那些很重要

感谢您的帮助

我看过https://pouchdb.com/api.html#create_indexhttps://pouchdb.com/2014/05/01/secondary-indexes-have-landed-in-pouchdb.html

到目前为止没有多少运气

1 个答案:

答案 0 :(得分:1)

正如CouchDB documentation所述:

  

... emit()函数可以在map函数中被称为多次,以便在单个文档的视图结果中创建多个条目......

现在我们将在map函数中多次使用emit()。此外,我们将发出数组以同时使用invoiceNumberbarCode作为索引,如下所示:

var myIndex = {
    _id: '_design/my_index',
    views: {
        'my_index': {
            map: function (doc) {
                for(var i=0, length=doc.invoices.length; i<length; i++){
                    emit(
                        // emit array of invoiceNumber and barCode as key:
                        [doc.invoices[i].invoiceNumber, doc.invoices[i].barCode],
                        // emit array of clientId and clientName as value
                        // Actually, value can be whatever you want:
                        [doc.clientId, doc.clientName]
                    );
                }
            }.toString()
        }
    }
};

现在让PUT我们的上述设计文档并使用PouchDB进行查询:

pouch.put(myIndex).then(() => {
  // query the index
  return pouch.query('my_index', {key: ['12312313','1234324']});
}).then(result => {
  // found docs with invoiceNumber === '12312313' and barCode === '1234324'
  console.log('Result: ', result)
});

另请查看this similar answer