簡體   English   中英

CouchDB“加入”兩個文件

[英]CouchDB “Join” two documents

我有兩個文件看起來有點像這樣:

Doc
{
  _id: AAA,
  creator_id: ...,
  data: ...
}

DataKey
{
  _id: ...,
  credits_left: 500,
  times_used: 0,
  data_id: AAA
}

我想要做的是創建一個視圖,允許我傳遞DataKey id(key = DataKey _id)並獲取DataKey和Doc的信息。

我的嘗試:

我首先嘗試在Doc中嵌入DataKey並使用map函數,如下所示:

function (doc)
{
  if (doc.type == "Doc")
  {
    var ids = [];
    for (var i in doc.keys)
      ids.push(doc.keys[i]._id);

    emit(ids, doc);
  }
}

但我遇到了兩個問題:

  1. 每個Doc可以有多個DataKey,因此使用startkey = [idhere ...]和endkey = [idhere ...,{}]不起作用(僅當密鑰發生在數組中的第一個時才有效)。
  2. 所有數據鍵都必須是唯一的,我寧願不制作像{_id = datakey}這樣的單獨文檔來保留密鑰。

有誰有想法我怎么能做到這一點? 如果有什么不清楚,請告訴我。

- - -編輯 - - -

我忘了提到在我的應用程序中我不知道Doc ID是什么,所以我需要能夠搜索DataKey的ID。

我想你想要的是什么

function (doc)
{
  if (doc.type == "Doc")
  {
    emit([doc._id, 0], doc);
  }

  if(doc.type == "DataKey")
  {
    emit([doc.data_id, 1], doc);
  }
}

現在,使用key=["AAA"]查詢視圖,您將看到所有文檔的列表。 第一個將是真正的“Doc”文檔。 所有其余的將是“DataKey”文檔,它們引用了第一個doc。

這是一種常見的技術,稱為CouchDB視圖排序規則

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM