Как удалить ключ из документа RethinkDB?
Я пытаюсь удалить ключ из документа RethinkDB.
Мои подходы (которые не сработали):
r.db('db').table('user').replace(function(row){delete row["key"]; return row})
Другой подход:
r.db('db').table('user').update({key: null})
Это просто устанавливает row.key = null (что выглядит разумно).
Примеры, протестированные в проводнике данных rethinkdb через веб-интерфейс.
Ответы
Ответ 1
Вот соответствующий пример из документации на веб-сайте RethinkDB: http://rethinkdb.com/docs/cookbook/python/#removing-a-field-from-a-document
Чтобы удалить поле из всех документов в таблице, вам необходимо использовать replace
для обновления документа, чтобы не включать нужное поле (используя without
):
r.db('db').table('user').replace(r.row.without('key'))
Чтобы удалить поле из одного конкретного документа в таблице:
r.db('db').table('user').get('id').replace(r.row.without('key'))
Вы можете изменить выбор документов для обновления, используя любой из селекторов в API (http://rethinkdb.com/api/), например. db
, table
, get
, get_all
, between
, filter
.
Ответ 2
Вы можете использовать replace
с without
:
r.db('db').table('user').replace(r.row.without('key'))
Ответ 3
Вам не нужно использовать замену для обновления всего документа.
Вот соответствующая документация: Команда ReQL: литерал
Предположим, что ваш пользовательский документ выглядит следующим образом:
{
"id": 1,
"name": "Alice",
"data": {
"age": 19,
"city": "Dallas",
"job": "Engineer"
}
}
И вы хотите удалить возраст из свойства данных. Обычно обновление просто объединяет ваши новые данные со старыми данными. r.literal может использоваться для обработки объекта данных как отдельного блока.
r.table('users').get(1).update({ data: r.literal({ age: 19, job: 'Engineer' }) }).run(conn, callback)
// Result passed to callback
{
"id": 1,
"name": "Alice",
"data": {
"age": 19,
"job": "Engineer"
}
}
или
r.table('users').get(1).update({ data: { city: r.literal() } }).run(conn, callback)
// Result passed to callback
{
"id": 1,
"name": "Alice",
"data": {
"age": 19,
"job": "Engineer"
}
}