在 couchdb db 中编写一个映射函数,将另一个文档插入到一个文档中
writing a map function in couchdb db that inserts another doc into a doc
我的 CouchDB 数据库中有两种类型的文档(doc.doc_type == doc1 和 doc.doc_type == doc2)
doc1 的结构是这样的:
{
_id: 123123,
_rev:1251231,
doc_type: doc1,
uid: 1
}
文档2的结构是这样的:
{
_id: 123123,
_rev:1251231,
doc_type: doc2,
uid: 1
docid: 1
}
我想编写一个视图,在其中整理 doc_type 为 doc1 的所有文档,但通过映射函数将 doc2 作为数组插入 doc1。
我写过这样的地图函数,但是好像不行:
function(doc) {
var d = []
if (doc.doc_type == "doc2") {
d.push(doc)
}
if (doc.doc_type == "doc1") {
var d1 = d.filter(d => {d.uid == doc.uid})
doc['doc2'] = d1
}
emit(doc._id, doc)
}
但是这是一个错误。 CouchDB 是否识别过滤器和映射?我的选择是什么?
您的 javascript 太现代了(没有 =>
)。但我认为您误解了地图的工作原理——它只会传递一个文档,因此您无需过滤任何内容。如果你有一个doc1
,d
数组将总是为空。
我的 CouchDB 数据库中有两种类型的文档(doc.doc_type == doc1 和 doc.doc_type == doc2)
doc1 的结构是这样的:
{
_id: 123123,
_rev:1251231,
doc_type: doc1,
uid: 1
}
文档2的结构是这样的:
{
_id: 123123,
_rev:1251231,
doc_type: doc2,
uid: 1
docid: 1
}
我想编写一个视图,在其中整理 doc_type 为 doc1 的所有文档,但通过映射函数将 doc2 作为数组插入 doc1。
我写过这样的地图函数,但是好像不行:
function(doc) {
var d = []
if (doc.doc_type == "doc2") {
d.push(doc)
}
if (doc.doc_type == "doc1") {
var d1 = d.filter(d => {d.uid == doc.uid})
doc['doc2'] = d1
}
emit(doc._id, doc)
}
但是这是一个错误。 CouchDB 是否识别过滤器和映射?我的选择是什么?
您的 javascript 太现代了(没有 =>
)。但我认为您误解了地图的工作原理——它只会传递一个文档,因此您无需过滤任何内容。如果你有一个doc1
,d
数组将总是为空。