我使用Mongoengine并希望删除标记(如果存在)。如果标签不存在,我想添加它。但是我的代码没有真正起作用
try:
Project.objects.filter(literature__oid=id).update_one(
pull__literature__S__tags=tag_name)
print("wanna delete "+tag_name)
except:
Project.objects.filter(literature__oid=id).update_one(
push__literature__S__tags=tag_name)
print("wanna add"+tag_name)
此代码仅从数据库中删除标记,但如果标记不存在,他不会跳转到except部分。所以他总是运行删除部分,即使标签不存在。有没有其他方法我可以用?到目前为止我还没有找到任何东西
文献的标签字段是一个列表字段。例如,mongoDB中的标记如下所示:
"tags": ["irrelevant", "relevant", "test"]
我的模型基本上是这样的:
class Literature(EmbeddedDocument):
oid = ObjectIdField(required=True, default=ObjectId,
unique=True, primary_key=True, sparse=True)
tags = ListField()
class Project(Document):
project_name = StringField(unique=True, required=True)
literature = ListField(EmbeddedDocumentField(Literature))
例如,我有一个带oid=1
的文学对象,一个带oid=2
的文学对象,oid=1有tags=["irrelevant", "test"]
,oid=2有tags =["relevant"]
。我现在想要python函数:
def LiteratureTag(id, tag_name):
#add tag_name to literature object with the passed id if the tag_name
#does't already exist in literature tags and if the tag does exist delete
#the tag from the literature object
因此,例如,如果我调用LiteratureTag(1, "relevant")
,它应该从oid=1的文献对象添加标记“相关”,如果我调用LiteratureTag(2, "test")
,它应该向oid=2的文献对象添加标记“测试”。如果我调用LiteratureTag(2, "relevant")
,标签“relevant”应该从oid=2的文献对象中删除
谢谢
我希望您不应该使用
try
和except
。只有当try
块引发错误时,才能进入except
。在你的情况下,它不会引起错误。您可以通过检查标记是否存在来尝试编写代码考虑到您的模式:
如果您的文献id有效^{,我将编写我的查询:
上面的查询与您的模式完全一致
相关问题 更多 >
编程相关推荐