import mongoengine as mge
mge.connect(host='mongodb://localhost/test', alias='test')
class Test1(mge.Document):
meta = {'collection': 'test1', 'db_alias': 'test'}
def_str1 = mge.StringField(required=True, default="111")
def_str2 = mge.StringField(default="222")
streams = mge.ListField(mge.StringField(), default=list)
У меня есть схема, подобная этой, и я тестирую ее, как показано ниже
Python 3.7.5 (default, Oct 25 2019, 15:51:11)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from db import mongodb_models as db
>>> obj = db.Test1()
>>> obj.save()
<Test1: Test1 object>
### mongo shell
### > db.test1.find() => as expected
### { "_id" : ObjectId("5dd63ee87bef19297e6f1f73"), "def_str1" : "111", "def_str2" : "222", "streams" : [ ] }
>>> obj.streams = []
>>> obj.save()
<Test1: Test1 object>
### mongo shell
### > db.test1.find() => as expected
### { "_id" : ObjectId("5dd63ee87bef19297e6f1f73"), "def_str1" : "111", "def_str2" : "222", "streams" : [ ] }
>>> obj.streams = ["1", "2"]
>>> obj.save()
<Test1: Test1 object>
### mongo shell
### > db.test1.find() => as expected
### { "_id" : ObjectId("5dd63ee87bef19297e6f1f73"), "def_str1" : "111", "def_str2" : "222", "streams" : [ "1", "2" ] }
>>> obj.streams = []
>>> obj.save()
### mongo shell
### > db.test1.find() => Unexpected here
### { "_id" : ObjectId("5dd63ee87bef19297e6f1f73"), "def_str1" : "111", "def_str2" : "222" }
В случае Неожиданный мне бы хотелось, чтобы поле streams stillнаходиться в документе со значением [] . Кто-нибудь может дать обходной путь для этого?