【问题标题】:Selector query comparing two fields Cloudant/CouchDB/Mango比较两个字段 Cloudant/CouchDB/Mango 的选择器查询
【发布时间】:2017-08-29 15:01:52
【问题描述】:

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

我正在尝试搜索和比较两个字段,并且仅在它们相等时返回相关结果。

例如:

{
 "_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”——因为 OF​​FER0 存在于“OfferID”中

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

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

【问题讨论】:

    标签: json couchdb cloudant couchdb-mango


    【解决方案1】:

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

    {
      "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 Query & Mango 只能查询单个文档 - 您不能说“让我获取所有提供的文档,而另一个文档具有特定属性”。在每个文档中包含您需要的所有数据,然后您就可以干净地查询它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多