Селекторный запрос, сравнивающий два поля Cloudant/CouchDB/Mango

У меня есть база данных 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" - поскольку OFFER0 существует в "OfferID"

РЕДАКТИРОВАТЬ (уточнение): запрос должен иметь возможность выбрать все _id, которые начинаются с ПРЕДЛОЖЕНИЯ и которые существуют в поле OfferID.

Я знаю, что могу настроить это с помощью представления (как видно из: Cloudant запрос для возврата записей, где 2 поля равны), но мне нужно это в запросе Mango, так как он будет работать над 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 Query & Mango может запрашивать только отдельные документы - вы не можете сказать "достаньте мне все документы, которые являются предложениями, если другой документ имеет определенное свойство". Включите все данные, которые вам нужны, в каждый документ, и тогда вы сможете сделать правильный запрос.

Другие вопросы по тегам