Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mongoengine预删除文件字段_Python_Mongodb_Python 2.7_Mongoengine - Fatal编程技术网

Python Mongoengine预删除文件字段

Python Mongoengine预删除文件字段,python,mongodb,python-2.7,mongoengine,Python,Mongodb,Python 2.7,Mongoengine,我是新来的mongoengine。我试图让pre_delete钩子删除存储在GridFS中的文件字段 我使用的是Python 2.7.10、Mongo 3.4和mongoengine 0.8.7 这是我的 import uuid import mongoengine as me class MyFiles(me.Document): meta = {"collection": "test"} guid = me.UUIDField(binary=False, required

我是新来的mongoengine。我试图让pre_delete钩子删除存储在GridFS中的文件字段

我使用的是Python 2.7.10、Mongo 3.4和mongoengine 0.8.7

这是我的

import uuid

import mongoengine as me

class MyFiles(me.Document):
    meta = {"collection": "test"}
    guid = me.UUIDField(binary=False, required=True)
    my_file = me.FileField()

    @classmethod
    def pre_delete(cls, sender, document, **kwargs):
        document.my_file.delete()


if __name__ == '__main__':
    me.connect(db='main', alias='default', host='localhost')

    m = MyFiles(guid=uuid.uuid4())
    m.my_file.new_file(content_type='text/plain')
    m.my_file.write("This is")
    m.my_file.write("my file")
    m.my_file.write("Hooray!")
    m.my_file.close()
    m.save()

    print(m.my_file.read())

    m.delete()
现在我正在调试m.delete()上的断点

我的.file.read()工作正常

集合“test”中有一个文档引用GridFS中的文件。

fs.files中有一个文件。

以fs.chunks为单位。

现在我运行m.delete()。 集合“test”为空。

fs.files不是空的。fs.chunks也不是。文件仍然存在。

根据,在删除MyFiles文档之前,我需要运行m.my_file.delete()来删除GridFS条目。如果我像这样将m.my_file.delete()放在m.delete()之前,我已经确认了这一点


但是我希望它在pre_delete中运行。这似乎是pre_delete的目的。你知道我做错了什么吗?

问题出在这里。我没有记录信号。这项工作:

import uuid

import mongoengine as me

class MyFiles(me.Document):
    meta = {"collection": "test"}
    guid = me.UUIDField(binary=False, required=True)
    my_file = me.FileField()

    @classmethod
    def pre_delete(cls, sender, document, **kwargs):
        document.my_file.delete()

me.signals.pre_delete.connect(MyFiles.pre_delete, sender=MyFiles)


if __name__ == '__main__':
    me.connect(db='main', alias='default', host='localhost')

    m = MyFiles(guid=uuid.uuid4())
    m.my_file.new_file(content_type='text/plain')
    m.my_file.write("This is")
    m.my_file.write("my file")
    m.my_file.write("Hooray!")
    m.my_file.close()
    m.save()

    print(m.my_file.read())

    m.delete()
import uuid

import mongoengine as me

class MyFiles(me.Document):
    meta = {"collection": "test"}
    guid = me.UUIDField(binary=False, required=True)
    my_file = me.FileField()

    @classmethod
    def pre_delete(cls, sender, document, **kwargs):
        document.my_file.delete()

me.signals.pre_delete.connect(MyFiles.pre_delete, sender=MyFiles)


if __name__ == '__main__':
    me.connect(db='main', alias='default', host='localhost')

    m = MyFiles(guid=uuid.uuid4())
    m.my_file.new_file(content_type='text/plain')
    m.my_file.write("This is")
    m.my_file.write("my file")
    m.my_file.write("Hooray!")
    m.my_file.close()
    m.save()

    print(m.my_file.read())

    m.delete()