Удаление столбца из 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)


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

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