2017-08-29 65 views
0

我有一个CouchDB数据库,它使用查询语言芒果 - 这似乎与Cloudant的查询语言相同。选择器查询比较两个字段Cloudant/CouchDB/Mango

我试图搜索和比较两个字段彼此,只有当他们相等时返回相关的结果。

例如:

{ 
"_id": "ACCEPT0", 
"_rev": "1-92ea4e727271aefd0a2befed0d4bb736", 
"OfferID": "OFFER0" 
} 

{ 
"_id": "ACCEPT1", 
"_rev": "3-986ca6e717b225ac909d644de54d5f7d", 
"OfferID": "OFFER3" 
} 

{ 
"_id": "OFFER0", 
"_rev": "1-2af5f5c7b1c59dd3f0997f748a367cb2", 
"From": "merchant1", 
"To": "customer1" 
} 

{ 
"_id": "OFFER1", 
"_rev": "6-f0927c5d4f9fd8a2d2b602f1c265d6d5", 
"From": "merchant1", 
"To": "customer2" 
} 

我想拿出一个查询这将在这个例子中,回归 “OFFER0” - 因为OFFER0存在于一个 “OFFERID”

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

我知道我可以用图(从看到:Cloudant query to return records where 2 fields are equal)设置的,但我需要这一个芒果查询,因为它会在Hyperledger

运行

回答

1

您可以轻松地返回文档,其_id场与“要约”与下面的查询开始:

{ 
    "selector": { 
    "_id": { 
     "$regex": "^OFFER" 
    } 
    } 
} 

,但这很可能是低效的,因为Cloudant必须扫描整个数据库,测试每个文件与正则表达式_id场。

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

{ 
"_id": "OFFER0", 
"_rev": "1-2af5f5c7b1c59dd3f0997f748a367cb2", 
"type": "offer", 
"From": "merchant1", 
"To": "customer1" 
} 

,然后查询返回那里type = 'offer'成为所有文件:

{ 
    "selector": { 
    "type": "offer" 
    } 
} 

我不完全理解你说的这个问题的一部分“存在于一个领域OFFERID。”但需要注意的是,Cloudant查询&芒果只能查询单个文档 - 您不能说“让我把所有文档都提供给另一个文档具有特定属性的地方”。在每个文档中包含所需的所有数据,然后您就可以干净地查询它。