这是我的查询
query Q_BUY_SELL{
description: "Select filtered Orders "
statement:
SELECT namespace.Order
WHERE ((((orderType != _$filterType AND orderStatus == _$filterStatus) AND bidTokenPrice == _$bidTokenPrice) AND orderer != _$orderer) AND property == _$property )
}
以下是我如何使用它
return query('Q_BUY_SELL', {
filterStatus: 'PENDING',
filterType: 'SELL',
bidTokenPrice: 10,
orderer:'resource:com.contrachain.User#o1',
property:'resource:com.contrachain.Property#p2'
})
.then(function (assets) {
console.log(assets);
// Some alterations to assets
这是我的数据库中唯一的资产,由于' orderer'而我在结果中没有预料到这一点。领域。 (请参阅查询中的orderer != _$orderer
)
{
"$class": "com.contrachain.Order",
"orderId": "Thu Feb 22 2018 15:57:05 GMT+0530 (IST)-30",
"orderType": "BUY",
"orderStatus": "PENDING",
"bidTokenPrice": 10,
"tokenQuantity": 30,
"orderTime": "2018-02-22T10:27:05.089Z",
"orderer": "resource:com.contrachain.User#o1",
"property": "resource:com.contrachain.Property#p2"
}
但它在控制台的响应中仍然存在。
TLDR;我在查询Q_BUY_SELL
中有5个条件(1,2,3,4,5),其中(1,5)工作正常,但2nd, 3rd and 4th
条件未应用于结果。
我觉得发布这个问题很愚蠢,因为问题似乎微不足道,但我现在已经坚持了一段时间,需要一些外部视角来确定我在这里缺少的东西。
**更新:模型的相关部分**
asset Property identified by propertyId {
o String propertyId
--> User owner
}
asset Order identified by orderId {
o String orderId
o OrderType orderType
o OrderStatus orderStatus default = 'PENDING'
o Double bidTokenPrice
o Double tokenQuantity
o DateTime orderTime
--> User orderer
--> Property property
}
abstract participant Account identified by emailId {
o String emailId
o String name default = ''
o DateTime joiningDate
o Boolean isActive default=false
}
participant User extends Account {
o Double balanceINR default=0.0
}
transaction PlaceOrder {
o OrderType orderType
o Double bidTokenPrice
o Double tokenQuantity
o DateTime orderTime
--> User orderer
--> Property property
}
enum OrderType {
o BUY
o SELL
}
enum OrderStatus {
o PENDING
o SUCCESSFUL
o VOID
}
答案 0 :(得分:2)
在事务中构建查询并在此处显示解析的示例FYI - > https://github.com/hyperledger/composer/blob/master/packages/composer-tests-functional/systest/data/transactions.queries.js
答案 1 :(得分:0)
只是说我没有看到你因为多重标准而遇到的问题 - 我已经尝试了5和6,混合 - 一切正常吗?也许你可以提供反馈。
我去测试了一些查询如下,参数化查询带有条件(基本上和你做的一样,对于不同的商业网络) - 在线游乐场(所以我创建queries.qry
文件然后调用查询我的TP功能(FYI和样本功能代码位于底部):
数字(下方)代表左侧'字段'在查询定义中(这些字段显示在下面的查询中(序数,从左到右)) - 我的数据'在底部 - 基本上我总是(除了一个测试)'错过'在tradingSymbol ==" 1"
的记录中query myQryTest { description: "Select all commodities" statement: SELECT org.acme.trading.Commodity WHERE (tradingSymbol != _$tradingSymbol AND (description == _$description OR description == _$description) AND mainExchange == _$mainExchange AND quantity == _$quantity AND owner == _$owner ) } }
结果:
(1 AND 2 AND 3 AND 4和5) - 即所有的' =='比较。(因此,第一个标准将变为tradeSymbol ==" 1"以上 - 仅仅用于此一个测试)。一切正常。 1条记录。
(!= 1 AND 2 AND 3 AND 4 AND = 5) - 所以标准中有一个否定。工作得很好。得到了我想要的结果(2条记录 - 见下面的样本数据)
(!= 1 AND(2 =" 2" OR 2 ==" 3")和3和4和5) - 6个标准,如上所示 - 括号中的一个(其中字段匹配是OR)。工作得很好。得到了正确的结果。我将记录3中的描述更改为" 4"我得到一条记录,
{ " $ class":" org.acme.trading.Commodity", " tradingSymbol":" 1", "说明":" 2", " mainExchange":" 3", "数量":4, "所有者":"资源:org.acme.trading.Trader#1" }
{ " $ class":" org.acme.trading.Commodity", " tradingSymbol":" 2", "说明":" 2", " mainExchange":" 3", "数量":4, "所有者":"资源:org.acme.trading.Trader#1" }
{ " $ class":" org.acme.trading.Commodity", " tradingSymbol":" 3", "说明":" 2", " mainExchange":" 3", "数量":4, "所有者":"资源:org.acme.trading.Trader#1" }
您可以自己尝试一下 - 您可以通过在线游乐场https://composer-playground.mybluemix.net/(部署贸易网络样本)的交易网络尝试这一点,并在参与者中创建交易者交易者1记录。
/**
* Try access elements of an array of B assets
* @param {org.acme.trading.Qry} qry - function to access A elements (and B assets)
* @transaction
*/
function myQryfunc(qry) {
return query('myQryTest', {
"tradingSymbol": "1",
"description": "2",
"mainExchange": "3",
"quantity": 4,
"owner": "resource:org.acme.trading.Trader#1"
})
.then(function (results) {
var promises = [];
for (var n = 0; n < results.length; n++) {
var asset = results[n];
console.log('Query result is ' + (n+1) + ', object is ' + asset);
console.log('Asset identifier is ' + asset.getIdentifier());
}
});
}
var promises = [];
for (var n = 0; n < results.length; n++) {
var asset = results[n];
console.log('Query result is ' + (n+1) + ', object is ' + asset);
console.log('Asset identifier is ' + asset.getIdentifier());
}
});
我的Qry交易的模型定义(在操场上调用)是
transaction Qry {
--> Commodity commodity