2017-08-29 118 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查詢&芒果只能查詢單個文檔 - 您不能說「讓我把所有文檔都提供給另一個文檔具有特定屬性的地方」。在每個文檔中包含所需的所有數據,然後您就可以乾淨地查詢它。