Couchdb 将不同的实体相互嵌入

Couchdb 将不同的实体相互嵌入,couchdb,Couchdb,我有两种类型的文档(实体)“book”和“author” 书籍文件样本: { _id:“123456”, 名称:“和平与战争”, 页数:“2234”, 作者编号:34567 } 作者文件样本: { _id:“34567”, 姓:“托尔斯泰”, 名字:“狮子座” } 问题是:如何创建返回以下结构的视图: { _id:“123456”, 名称:“和平与战争”, 页数:“2234”, 作者编号:34567, 姓:“托尔斯泰”, 名字:“狮子座” } 可能吗 谢谢 一种方法是使用WPCoder的想法和i

我有两种类型的文档(实体)“book”和“author”

书籍文件样本: { _id:“123456”, 名称:“和平与战争”, 页数:“2234”, 作者编号:34567 }

作者文件样本: { _id:“34567”, 姓:“托尔斯泰”, 名字:“狮子座” }

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

{ _id:“123456”, 名称:“和平与战争”, 页数:“2234”, 作者编号:34567, 姓:“托尔斯泰”, 名字:“狮子座” }

可能吗


谢谢

一种方法是使用WPCoder的想法和
include_docs=true
查询得到响应:
“value”:{book_id:“123456”,name:“Peace and War”,pages:“2234”},“doc:{id:34567,姓氏:“Tolstoy”,name:“Leo”}
。我会那样做的

如果您确实不喜欢
include_docs
,也可以尝试映射:

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”,{}]
的查询将返回作者的书籍列表。你可以过滤你的书并将它合并到一个带有列表的对象中,但你必须事先知道作者(用键搜索而不是作者)


您也可以使用
键=[[“作者id”,0],“作者id”,“图书id”]
但您必须同时知道作者和图书id。这取决于您需要它做什么。我再重复一遍:我会使用WPCoder建议的方法。

这可能是您想要的吗?不,那不是。它将返回一个完整的author文档,作为带有book的_id的值。但是所有其他book的字段将不存在于该视图中。@Integral WPCoder的链接是正确的。然后,您可以使用列表(使用搜索)将数据“合并”到一个对象中!我想我需要解释我的问题。问题不是如何查询两个文档以接收另一个文档。问题是,我如何才能收到这样一个包含许多文档的结构,因此我有10本书和3位作者,希望收到一个json文件,其中只有一个新结构的文档:{id:“123456”,名称:“和平与战争”,页码:“2234”,作者id:34567,姓氏:“托尔斯泰”,姓名:“Leo”},{id:“34567”,姓名:“复活”,页码:“331”,作者id:34567,姓氏:“托尔斯泰”,姓名:“利奥”},{作者id:4578,姓名:“犯罪与惩罚”,页码:“876”,作者id:34568,姓氏:“陀思妥耶夫斯基”,姓名:“Fedor”},无其他文件。接下来我可以用主干js得到这个结构并定义模型。我理解你的问题,答案取决于你对搜索内容的知识和结果形式的限制。如果您允许获取JSON
{…,值:{…图书数据…},文档:{…作者数据…}
,那么WPCoder的建议就是您的解决方案。它确实需要知道书的id。如果你知道作者id,你也可以使用另一种解决方案,它在你正在阅读的输出形式方面更灵活(但确实需要更多关于结果的先验知识)。好的,WPCoder建议的正确答案是:
map:function(doc){If(doc.type==“book”){emit(doc._id,{id:doc.author,name:doc.name,pages:doc.pages}}}
但是你能告诉我更多关于这些词的信息吗“你可以用列表过滤你的书并将其合并到一个对象中,但你必须事先知道作者…”你能举个例子吗(例如,合并到一个对象中,列表函数)?非常感谢!以下是非常有用的参考: