2017-03-09 13 views
1

私はhyperledger(v0.6)テーブルを扱っており、次のような構造を持っています。私はREFNUMのみまたは両方REFNUM & ステータスでテーブルを照会するとき部分的なキー値を使ってテーブルを照会する方法

var columnDefsTableOne []*shim.ColumnDefinition 
columnOneTableOneDef := shim.ColumnDefinition{Name: "RefNum", 
    Type: shim.ColumnDefinition_STRING, Key: true} 
columnTwoTableOneDef := shim.ColumnDefinition{Name: "Amount", 
    Type: shim.ColumnDefinition_STRING, Key: false} 
columnThreeTableOneDef := shim.ColumnDefinition{Name: "Status", 
    Type: shim.ColumnDefinition_STRING, Key: true} 
columnDefsTableOne = append(columnDefsTableOne, &columnOneTableOneDef) 
columnDefsTableOne = append(columnDefsTableOne, &columnTwoTableOneDef) 
columnDefsTableOne = append(columnDefsTableOne, &columnThreeTableOneDef) 
    return stub.CreateTable("Recon", columnDefsTableOne) 

、行が返されます。しかし、ステータスの照会を試みると、何も返されません。これを達成する方法はありますか?以下

は、行キーは、リレーショナルデータベースの意味で真のキーではないクエリコード

if len(args) < 1 { 
    return nil, errors.New("Function failed. Must include at least key values") 
} 

var columns []shim.Column 

col1Val := args[0] 
col1 := shim.Column{Value: &shim.Column_String_{String_: col1Val}} 
columns = append(columns, col1) 

if len(args) > 1 { 
    col2Val := args[1] 
    col2 := shim.Column{Value: &shim.Column_String_{String_: col2Val}} 
    columns = append(columns, col2) 
} 

rowChannel, err := stub.GetRows("Recon", columns) 
if err != nil { 
    return nil, fmt.Errorf("Operation failed. %s", err) 
} 

var rows []shim.Row 
for { 
    select { 
    case row, ok := <-rowChannel: 
     if !ok { 
      rowChannel = nil 
     } else { 
      rows = append(rows, row) 
     } 
    } 
    if rowChannel == nil { 
     break 
    } 
} 

jsonRows, err := json.Marshal(rows) 
if err != nil { 
    return nil, fmt.Errorf("Operation failed. Error marshaling JSON: %s", err) 
} 

return jsonRows, nil 

答えて

1

あります。内部的には、連結されたキーのセットに対して範囲クエリが利用されます。したがって、クエリのキーは、モデル化された順序と同じ順序で提供する必要があります。

Fabric v1.0でチェーンコードAPIが更新され、より直感的な動作になりました。 v1.0では、複合キーをモデル化してから、キーのサブセットを照会することができます(やはり、モデル化された順番で)。

異なるキーの組み合わせを照会するには、照会するユニークな組み合わせをそれぞれモデル化する必要があります。これらを単純な指標と考えてください。

v1.0では、データをJSONとしてモデル化し、CouchDBを状態データベースとして利用することもできます。この場合、JSONの任意のフィールドで直接照会することができます。

ここmarbles02のchaincodeの両方のデータパターンの例があります:

https://github.com/hyperledger/fabric/blob/release/examples/chaincode/go/marbles02/marbles_chaincode.go. 
関連する問題