我正在研究Hyperledger fabric。我需要从数组中获取一个特定的值,而不是在CouchDB中获取一个完整的文档。
例子
{
"f_id": "1",
"History": [
{
"amount": "1",
"contactNo": "-",
"email": "i2@mail.com"
},
{
"amount": "5",
"contactNo": "-",
"email": "i@gmail.com",
}
],
"size": "12"
}
我只想要一个 电子邮件:"i2@mail.com" 对象在 历史 数组,而不是一个完整的历史数组。
芒果查询。
{
"selector": {
"History": {
"$elemMatch": {
"email": "i2@mail.com"
}
}
}
}
输出:
{
"f_id": "1",
"History": [
{
"amount": "1",
"contactNo": "-",
"email": "i2@mail.com"
},
{
"amount": "5",
"contactNo": "-",
"email": "i@gmail.com",
}
],
"size": "12"
}
完整的历史记录 数组 但只需要第一个对象的 历史阵列。
谁能指导我一下?
谢谢,我正在研究Hyperledger fabric。
我认为这是不可能的,因为富查询是根据给定的选择器来检索完整的记录(键值对)。
你可能要重新考虑你的设计。例如,如果你想保存一个历史记录,并从那里进行查询,这种方法可能会成功。
my_record
. 如果键存在。
my_record
.{"DocType": "my_history", "time": "789546"}
. 在这些新属性的帮助下,将可以创建索引并通过查询进行搜索。my_record_<uniqueId>
如果key不存在,就把你的值和key一起放进去。my_record
而没有任何新的属性。
采用这种方法 my_record
键将始终保持最新值。你可以通过使用索引(或不使用,基于你的性能考虑)查询任何属性的历史记录,而不需要分页。
这种方法也是较少消耗空间的方法。因为如果你在单个键上积累历史记录,现有的历史记录每次都会被复制到下一个版本,这意味着你的每一个条目都会消耗 previous_size + delta
,而不仅仅是 delta
.