Удаление столбца из DictField в MongoDB [Flask + MongoEngine]

Мне нужно удалить определенный столбец (в данном случае «Идентификатор бумаги») из DictField (в данном случае «контент») во всех документах. Соответствующий скрипт mongo-shell для того же самого:

db.list_input_file.update({},{$unset:{"content.Paper ID":1}}, false, true);

Как мне написать то же самое, используя MongoEngine, предполагая, что мой класс модели называется JListInputFile. документация для этого не очень полезна.


person Anand Sainath    schedule 01.10.2014    source источник


Ответы (1)


arrow_upward
1
arrow_downward

Я думаю, что проблема, с которой вы столкнулись, - это пробел в имени поля, означающий, что вы не можете передать его в качестве аргумента ключевого слова, например:

JListInputFile.objects.update(unset__content__Paper ID=1)

Работает ли использование словаря kwargs:

JListInputFile.objects.update(**{"unset__content__Paper ID": 1})
person Ross    schedule 02.10.2014
comment
Я чувствую себя глупо, спрашивая об этом, я подумал, как только я понял, как удалить столбец, его переименование будет иметь аналогичную конструкцию. Но, к сожалению, нет конструкции, называемой переименованием. Не могли бы вы помочь мне с примером запроса на переименование? - person Anand Sainath; 02.10.2014
comment
не могли бы вы помочь мне с этим? Кроме того, мне очень сложно перевести запросы MongoDB, относящиеся к DictionaryField, в запрос MongoEngine. Не могли бы вы указать на какой-нибудь учебник, который я мог бы использовать для того же? - person Anand Sainath; 03.10.2014
comment
Похоже на ошибку — $rename не поддерживается — так что создайте тикет для этого. Вы все еще можете добиться этого, выполнив необработанный запрос - docs.mongoengine.org /guide/querying.html#raw-queries - person Ross; 03.10.2014
comment
Спасибо за это! Я отправил запрос на . Не могли бы вы сказать мне, как я могу переименовать на основе необработанного запроса? - person Anand Sainath; 03.10.2014
comment
См.: docs.mongodb.org/manual/reference/operator/update/rename. Я не проверял, но что-то вроде этого: JListInputFile.objects.update(__raw__={"$rename": {"content.old_name": "content.new_name"}}) - person Ross; 03.10.2014