我需要hyperledger fabric中的getQueryResult()函数的帮助。我知道我可以这样使用它:
String queryHash;
QueryResultsIterator<KeyValue> results = stub.getQueryResult("{"selector":{"hash":"" + queryHash + ""}}");
运行一个查询,该查询在每个资产中搜索那些将散列参数设置为queryHash字符串的资产。然而,目前我有3种不同类型的资产,我想了解如何在其中一种上设置搜索。
让我解释一下。假设我有3种不同类型的资产。例如,一个名为汽车的资产及其属性(id、名称、模型等),一个名为卡车的资产及其属性,以及另一个名为飞机的资产及其属性。假设我想进行一个查询,按品牌搜索所有汽车,但不包括卡车和飞机。我如何在查询中指出我只引用了那种类型的资产?
感谢为什么要查询单个对象?
我不知道你的链码模型,但假设你有某种ID,它会是这样的:
String id;
String queryHash;
// ...
QueryResultsIterator<KeyValue> results = stub.getQueryResult("{"selector":{"id":"" + id + """ + ", " + ""hash":"" + queryHash + "" }}");
如果您可以访问它的CouchDB键,您可以简单地获取对象并在反序列化时检查散列:
String couchdbKey;
// ...
byte[] ba = stub.getState(couchdbKey);
// Deserialize ba and check hash
编辑
我认为你应该重构你的模型。我通常在Go中开发链代码,但在Java中可能是这样的(检查代码,它是在飞行中编写的):
public abstract class Asset {
@Property()
private String doctype;
@Property()
private String id;
protected Asset(String doctype) {
this.doctype = doctype;
}
public String getDoctype() {
return doctype;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
// ...
}
@DataType()
public class Car extends Asset {
public static final String DOCTYPE = "car";
public Car() {
super(Car.DOCTYPE);
}
// ...
}
则可以查询每个型号的doctype
。您最好为doctype
创建一个索引。