在我的hyperledger作曲器应用程序中,我想编写一个命名查询,以返回具有特定爱好的所有人。
“人”的模型如下:
participant Person identified by id {
o String id
o String firstName
o String lastName
o String email
--> Hobby[] hobbies optional
}
“爱好”的模型如下:
asset Hobby identified by name {
o String name
}
命名查询具有以下结构:
query selectPersonsByHobby {
description: "Select all persons with a certain hobby."
statement:
SELECT org.comp.myapp.Person
WHERE //don't know what to put here//
}
我不知道在“ WHERE”运算符后面添加什么以实现我想要的。
我想要类似以下的内容:
query selectPersonsByHobby {
description: "Select all persons with a certain hobby."
statement:
SELECT org.comp.myapp.Person
WHERE (hobbies.contains(_$hobby))
}
这甚至有可能吗?
答案 0 :(得分:1)
简短的答案是此查询应该可以工作:
query selectConsultantsBySkill {
description: "Select all persons with a certain hobby."
statement:
SELECT org.comp.myapp.Person
WHERE (hobbies CONTAINS _$targetHobby)
}
但是请注意,由于您的兴趣爱好是 Relationships 的数组,因此targetHobby参数必须类似于resource:org.acme.Hobby#cycling
。在生产场景中,您将通过UI程序“调用”查询,因此可以预先添加关系语法。
我想这只是一个测试示例,但我想知道Hobby是否需要成为恋人?如果没有的话,会更容易。
您也可以使用概念(甚至是概念中的枚举类型!)。这是带有概念的修改后的模型和查询的示例:
participant Person identified by id {
o String id
o String firstName
o String lastName
o String email
o Interest[] passTime
}
concept Interest {
o String name
o String description
}
query selectConsultantsBySkill {
description: "Select all persons with a certain hobby."
statement:
SELECT org.comp.myapp.Person
WHERE (passTime CONTAINS (name == _$targetHobby ))
}