我正在处理Hyperledger结构。我需要数组中的一个特定值,而不是CouchDB中的一个完整文档。
范例
{
"f_id": "1",
"History": [
{
"amount": "1",
"contactNo": "-",
"email": "i2@mail.com"
},
{
"amount": "5",
"contactNo": "-",
"email": "i@gmail.com",
}
],
"size": "12"
}
我只想要一个电子邮件:“i2@mail.com“对象在history数组上,而不是完整的History数组。
芒果查询:
{
"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"
}
完整历史数组,但仅需要历史数组的第一个对象。
有谁能给我指路吗?
- 谢谢-谢谢
1条答案
按热度按时间icnyk63a1#
我认为这是不可能的,因为富查询是根据给定的选择器检索完整的记录(键-值对)。
您可能需要重新考虑您的设计。例如,如果您要保存历史记录并从中进行查询,则此方法可能会产生以下效果:
1.获取特殊密钥的状态
my_record
。my_record
新值{"DocType": "my_history", "time": "789546"}
。在这些新属性的帮助下,可以创建索引并通过查询进行搜索。my_record_<uniqueId>
充实 * 旧值my_record
放在一起,而不添加任何新属性。通过这种方法,
my_record
键将始终保存最新值。您可以使用索引(或不使用索引,取决于您的性能问题)来查询任何不带/不带分页的属性的历史记录。这种方法也将是一种占用空间较少的方法。因为如果你在单个键上累积历史记录,现有的历史记录每次都会被复制到下一个版本,这意味着你的每个条目都将占用
previous_size + delta
,而不仅仅是delta
。