Couchdb复杂查询

时间:2015-06-01 15:37:15

标签: couchdb pouchdb

我有以下结构的文件:

exampleDoc: {
    _id: 1,
    type: 'payments',
    date: '06-01-2015',
    userId: 2,
    categoryId: 3,
    amount: 20.49
}

我想执行以下查询:

SELECT * FROM payments
WHERE userId IN (1,2,3)
AND categoryId IN (4, 5, 6, 8)
ORDER BY date;

如何在NoSQL(CouchDB)中执行此操作?

提前谢谢!

1 个答案:

答案 0 :(得分:1)

您想要创建一个在[userId, categoryId]上编制索引的设计文档:

// check out pouchdb-upsert plugin for putIfNotExists
db.putIfNotExists({
  _id: '_design/my_index',
  views: {
    my_index: {
      map: function (doc) {
        emit([doc.userId, doc.categoryId]);
      }.toString()
    }
  }
});

然后针对您要获取的所有keys对进行[userId, categoryId]查询:

db.query('my_index', {
  include_docs: true,
  keys: [
    [1, 4],
    [2, 4],
    [3, 4],
    [1, 5],
    [2, 5],
    [3, 5],
    // etc.
  ]
});

顺便说一下,pouchdb-find插件完成后会更简单,您可以使用$in运算符和$and运算符。 :)