私はCouchDBの1.6.1で、これに類似した文書を持っている:CouchDBのビュー(マップ/削減)
"_id": "test_test",
"_rev": "4-8eb22214f7f3dccd3c979f95ded0a7b0",
"test": {
"sample": {
"abc": {
"aaa": 877,
"bbb": 202,
"ccc": 0,
"ddd": 362,
"eee": 242,
"ggg": 81
},
"def": {
"aaa": 697,
"bbb": 233,
"ccc": 0,
"ddd": 178,
"eee": 90,
"ggg": 5
},
"ghi": {
"aaa": 987,
"bbb": 396,
"ccc": 0,
"ddd": 399,
"eee": 178,
"ggg": 108
},
"jkl": {
"aaa": 1165,
"bbb": 332,
"ccc": 0,
"ddd": 286,
"eee": 173,
"ggg": 100
},
私は、このようなからデータを抽出したい:
1)
"test": {
"sample": {
"abc": {
"aaa": 877,
"def": {
"aaa": 697,
"ghi": {
"aaa": 987, etc.
か:
2)
"test": {
"sample": {
"def": {
"aaa": 697,
"bbb": 233,
"ccc": 0,
"ddd": 178,
"eee": 90,
"ggg": 5
},
また、'test'
のすべてのドキュメント、または'sample'
またはすべてのドキュメントの合計を得ることもできます'def'
のドキュメント、または'aaa'
のすべてのドキュメント
は、私は次のようにJavaScriptのマップがあります。
function(doc) {
if(doc.test.sample.abc.aaa){
emit(null, doc.test.sample.abc.aaa);
}
}
をこれは正しく私も試してみました(877)
単一の値を与えるを
function(doc) {
for (var i in doc.test.sample.abc){
emit(doc.test.sample.abc[i], null);
}
}
得ることを望ん:
"aaa": 877,
"bbb": 202,
"ccc": 0,
"ddd": 362,
"eee": 242,
"ggg": 81
ソム1つはmap/reduceで成功し、時には何も動作しません。
フィールドをループするのは難しいようです。
ご協力いただければ幸いです。
編集:
{
"_id": "_design/app",
"_rev": "1-b20db05077a51944afd11dcb3a6f18f1",
"filters": {
"important": "function(doc, req) { if(doc.priority == 'high') { return true; }
else { return false; }}"
}
}
の "変更通知、フィルタ" セクションからサンプルコード私はCouchDBのにこのコードを貼り付けた場合、それが拒否されます。 JSONLintテストにも失敗します。 私は同じ結果でそれを細分化しようとしました。 私はここで何が見えないのですか? 下記の「回答2」に引用されているコードJSONLintテストをパスし、CouchDBはそれを受け入れます。 しかし、特定の機能を入力するとすぐに問題が発生します。 これに対処する方法はありますか。 もう一度多くのおかげです。
EDIT2:
私はほぼ存在しています?
このコードは、ソファーで受け入れられている:
{
"_id": "_design/lists",
"_rev": "3-628dc2f53051971994043c2e0bfc44ea",
"language": "javascript",
"views": {
"list_setup": {
"map": "function(doc) {if(doc.compartment.number){ emit(null, doc.compartment.number);}}"
}
},
"lists": {
"first_list": "function(head, req) {var result = []; while (row = getRow()) { if (row !== null) { row.key + row.value else{ send(JSON.stringify({status_code: 404}));}}send(JSON.stringify(result));}}"
}
}
私はカール実行する場合は、私は、関数のrow.key + row.value
一部をどうするかわからない
{"error":"compilation_error","reason":"Expression does not eval to a function. (function(head, req) {var result = []; while (row = getRow()) { if (row !== null) { row.key + row.value else{ send(JSON.stringify({status_code: 404}));}}send(JSON.stringify(result));}})"}
を取得します。
申し訳ありませんが、これは長くかかりました。
私に質問を明確にすることはできますか? test.sample.abcチャイルドのマッピング関数のヘルプが必要ですか? –
AlexisCôté私は、上記のオプション1)を得ることを手助けする必要があります。 – jlb333333