选择器查询比较两个字段Cloudant / CouchDB / Mango

时间:2017-08-29 15:01:53

标签: json couchdb cloudant couchdb-mango

我有一个CouchDB数据库,它使用查询语言Mango - 它似乎与Cloudant的查询语言相同。

我正在尝试搜索并比较两个字段,只有当它们相等时才返回相关结果。

例如:

{{1}}

我试图提出一个查询,在这个例子中,将返回“OFFER0” - 因为OFFER0存在于“OfferID”

编辑(澄清):查询需要能够选择以OFFER开头且存在于OfferID字段中的所有_id。

我知道我可以使用视图设置它(如:Cloudant query to return records where 2 fields are equal所示),但我需要在Mango查询中使用它,因为它将在Hyperledger上运行

1 个答案:

答案 0 :(得分:2)

您可以使用以下查询轻松返回 _id 字段以“OFFER”开头的文档:




  {&#xA ; “选择器”:{
 “_id”:{
 “$ regex”:“^ OFFER”
 }
 }
}
  




但这可能效率低下,因为Cloudant必须扫描整个数据库,测试每个文档 _id 字段。





设计数据的更好方法可能是使 type 字段区分在数据库中的文档类型之间,例如




  {
 “_id”:“OFFER0”,
 “_rev”:“1-2af5f5c7b1c59dd3f0997f748a367cb2”,
 “type”:“offer”,
 “来自”:“商家1”,
 “收件人”:“customer1”
}
  




然后返回所有 type ='的文档的查询offer'变为:




  {
 “选择器”:{
 “type”:“offer”
 }
}
  




我不完全理解你在哪里说“哪一个存在于OfferID字段中“。但重要的是要注意Cloudant Query&芒果只能查询单个文件 - 你不能说“把我所有的文件都拿给我,另一个文件有一定的属性”。在每个文档中包含您需要的所有数据,然后您就可以干净地查询它。