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 在db.ListField(BaseList)中查找对象_Python_Mongodb_Flask_Mongoengine_Flask Mongoengine - Fatal编程技术网

Python 在db.ListField(BaseList)中查找对象

Python 在db.ListField(BaseList)中查找对象,python,mongodb,flask,mongoengine,flask-mongoengine,Python,Mongodb,Flask,Mongoengine,Flask Mongoengine,我有一个模型如下: class Primary(db.Document): primaryName = db.StringField(required=True, max_length=20) secondaries = db.ListField(db.EmbeddedDocumentField(Secondary)) class Secondary(db.EmbeddedDocument): secondaryName = db.StringField(require

我有一个模型如下:

class Primary(db.Document):
    primaryName = db.StringField(required=True, max_length=20)
    secondaries = db.ListField(db.EmbeddedDocumentField(Secondary))

class Secondary(db.EmbeddedDocument):
    secondaryName = db.StringField(required=True, max_length=20)
    secondarySurname = db.StringField(max_length=20)
我想获得一个具有特定名称的Secondary对象,如果它不存在,则创建它。到目前为止,我还没有找到比这更好的方法:

# get the object if it exists already. Create otherwise
targetSecondary = None
for curSecondary in primary.secondaries:
    if curSecondary.secondaryName == 'targetName':
        targetSecondary = curSecondary
        break
if not targetSecondary:
    targetSecondary = Secondary(secondaryName='targetName')
    primary.secondaries.append(targetSecondary)
targetSecondary.secondarySurname = 'blahblah'

我想知道是否有更好的方法,我几乎肯定有,如果它只是一些现成的方法从MongoEngine我还不知道。提前感谢您的帮助。

不确定您的问题,但您可以使用类似isinstance函数的功能来检查它是否是某个类的实例

您可以使用iInstance检查特定名称是否是所需类的实例

>>> class A:
...     pass
... 
>>> a = None
>>> b = A()
>>> isinstance(a,A)
False
>>> isinstance(b,A)
True
>>> 

如果您得到的是False,我想您可以创建实例。

虽然我不知道如何在这种情况下使用它,但您的代码对我来说很有趣,我可以在其他地方使用它。谢谢您的建议,kingsdeb。@makaron,您是想检查targetSecondary是否是Secondary类的实例,还是targetSecondary始终是Secondary类的实例(如果存在)?免责声明:我从未使用过mongodbIt,它始终是该类的实例: