将不同的实体彼此嵌入

时间:2012-10-29 22:02:50

标签: couchdb

我有两种类型的文件(实体)"书"和"作者"。

书籍文件样本: {   _id:" 123456&#34 ;,   名称:"和平与战争",   网页:" 2234&#34 ;,   AUTHOR_ID:34567 }

作者文件样本: {   _id:" 34567&#34 ;,   姓:"托尔斯泰&#34 ;,   名:"利奥" }

问题是:如何创建返回结构的视图:

{   _id:" 123456&#34 ;,   名称:"和平与战争",   网页:" 2234&#34 ;,   AUTHOR_ID:34567,   姓:"托尔斯泰&#34 ;,   名:"利奥" }

有可能吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

一种方法是使用WPCoder的想法和include_docs=true查询来获得响应:"value": { book_id:"123456", name:"Peace and War", pages:"2234" }, "doc": {_id:34567, surname:"Tolstoy", name:"Leo" }。我会这样做。

如果你真的不喜欢include_docs,你也可以试试map:

if (doc.author_id) {
  emit([doc.author_id, doc._id], doc);
} else
// check if author
if (doc.surname && doc.name) {
  emit([_id, 0], doc);
}

现在,带有选项?startkey=["author id"]&endkey["author id", {}]的查询将返回作者的书籍列表。您可以过滤您的图书并将其合并为一个包含列表的对象,但您必须先了解作者(使用密钥搜索而不是作者)。

您也可以使用keys=[["author id", 0], ["author id", "book id"]],但您必须同时了解作者和书籍ID。这一切都取决于你需要它。我再说一遍:我会用WPCoder的建议。