Создать представление в CouchDB в приложении python - PullRequest
2 голосов
/ 30 апреля 2020

У меня есть база данных в CouchDB, и мне интересно, возможно ли создать представление непосредственно из python вместо использования GUI. Я новичок в CouchDB, и мне нужна функция, которая эквивалентна SELECT DISTINCT в SQL, а представление типа

function (doc) {
  if(doc.MovieId == "1254")
    emit(doc.Rating, 1);
}

является идеальным. Проблема в том, что я должен делать это представление гораздо дольше MovieId с (берется с клавиатуры).

Я спрашиваю вас, возможно ли создать / удалить подобные представления прямо из python, потому что на net я ничего не нашел. Если это невозможно, это хорошая идея, чтобы сделать запрос Man go и отобразить результаты самостоятельно?

--- EDIT ---

json_data = {
  "_id": "_design/titaRat",
  "_rev": "3-ceb11154b13457c55b1f98f4e9d15b03",
  "views": {
    "titRat": {
      "map": "function (doc) { var id_prefix = \"ratings :\"; if(doc._id.substr(0, id_prefix.length) === id_prefix && doc.MovieId == \"1721\") emit(doc.Rating, 1);}",
      "reduce": "_count"
    }
  },
  "language": "javascript",
  "options": {
    "partitioned": False
  }
}

db.save(json_data)


ResourceConflict: ('conflict', 'Document update conflict.')

Я получил это ошибка, но нет документа с таким именем

1 Ответ

1 голос
/ 01 мая 2020

Вы можете создать представление из python так же, как и любой другой документ в couch deb.

Разница в том, что вам нужно будет создать проектный документ.

Документ для вашей функции будет выглядеть следующим образом:

{
  "views": {
    "movie_ratings_view": {
      "map": "function(doc) { if(doc.MovieId == "1254") emit(doc.Rating, 1); }",
    }
  }
}

Как видите, функция карты сохраняется в виде строки. Если вы хотите добавить форматирование, вам нужно добавить его, например, \n и \t.

Чтобы сохранить этот документ, вы бы POST добавили его к POST /{db}/_design/movie_ratings_ddoc

You затем вы можете вызвать ваше представление через GET /{db}/_design/movie_rations_ddoc/_view/movie_ratings_view

. Вы можете сохранить несколько видов для одного документа проекта.

Если вы хотите удалить представление, вы можете удалить весь документ проекта или просто обновить дизайн сделать c с удаленным видом из объекта.

Для получения дополнительной информации о том, как использовать представления, прочитайте: https://docs.couchdb.org/en/master/api/ddoc/views.html

...