【问题标题】:Removing a column from a DictField in MongoDB [Flask + MongoEngine]从 MongoDB [Flask + MongoEngine] 中的 DictField 中删除列
【发布时间】:2014-11-26 21:35:31
【问题描述】:

我需要从所有文档的 DictField(在本例中为“内容”)中删除特定列(在本例中为“Paper ID”)。对应的 mongo-shell 脚本是

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

假设我的模型类名为 JListInputFile,我如何使用 MongoEngine 编写相同的内容。 documentation 也不是很有帮助。

【问题讨论】:

    标签: python mongodb flask mongoengine flask-mongoengine


    【解决方案1】:

    我认为您遇到的问题是字段名称中的空格,这意味着您不能将其作为关键字参数传递,例如:

    JListInputFile.objects.update(unset__content__Paper ID=1)
    

    使用字典 kwargs 是否有效:

    JListInputFile.objects.update(**{"unset__content__Paper ID": 1})
    

    【讨论】:

    • 我觉得问这个很傻,我想一旦我想出了如何删除一列,重命名它就会有类似的结构。但不幸的是,没有称为重命名的构造。你能帮我做一个重命名查询示例吗?
    • 你能帮我解决这个问题吗?此外,我发现将与 DictionaryField 相关的 MongoDB 查询转换为 MongoEngine 查询非常困难。你能指出一些我可以使用的教程吗?
    • 看起来像一个错误 - $rename 似乎不受支持 - 所以为那个打开一张票。您仍然可以通过执行原始查询来实现这一点 - docs.mongoengine.org/guide/querying.html#raw-queries
    • 谢谢!我已经提交了issue。你能告诉我如何根据原始查询进行重命名吗?
    • 见:docs.mongodb.org/manual/reference/operator/update/rename 我还没有测试过,但是类似这样的:JListInputFile.objects.update(__raw__={"$rename": {"content.old_name": "content.new_name"}})
    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 2015-09-19
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多