Запрос о поведении mongoengine? - PullRequest
0 голосов
/ 21 ноября 2019
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находиться в документе со значением [] . Кто-нибудь может дать обходной путь для этого?

...