与PouchDB链接的文档

时间:2017-08-30 14:39:07

标签: pouchdb

我想在PouchDB上使用带有查询方法的Linked文档来连接两种类型的文档。

我的代码正在运行,但不是动态的:

const join = (doc) => {
  if (doc.mediasId === '3') {
    return emit(doc);
  }
}

Canvas.query(join, {include_docs: true}).then((data) => {
  console.log(data);
  this.setState({
    canvas: data.rows
  });
});

我想用动态数字替换'3'(在测试中)。如果我在我的连接函数上添加数字参数,我有一个错误...

任何人都有想法在链接文档PouchDB上使用动态'id'吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

在构建要搜索的索引时,动态密钥不起作用 - 否则系统必须为每个可能的值构建索引。

要构建索引,您将发出一个键和一个值。键是“emit”的第一个参数,值是第二个参数(包含您想要的信息)。

索引按键排序。我不确定你的情况是什么关键 - 但这是你想要找到的东西 - 例如。 “person_name”或“car_colour”。要使用CouchDb“链接文档”功能,您必须在值中发出“_id”并使用“include_docs”选项。 “_id”(“链接”)的值作为第一个文档中的值存在。这允许您通过第一个文档中的键进行搜索,并访问链接的第二个文档的值。

在“查询”的PouchDb documentation中有一个比这更好的描述,这样的例子......

构建索引:

function my_index(doc) {
  // join artist data to albums
  if (doc.type === 'album') {
    emit(doc.name, {_id : doc.artistId, albumYear : doc.year});
  }
}

然后查询索引,获取链接文档:

db.query(my_index, {key: "Dark Side Of The Moon", include_docs : true}).then(function (result) {
  // handle result
  console.log(JSON.stringify(result));
}).catch(function (err) {
  console.log(err);
});

“my_index”函数应保存在数据库的设计文档中以提高效率,但最好阅读相关文档。希望这会有所帮助。