我想从 a 中删除一些引用ListField(ReferenceField)
,仅基于它们的值。
我将有关图像的信息存储在以下模型中:
class ImageUrl(Document):
src = UrlField()
counter = IntField()
deleted = BooleanField()
我们将id
页面上遇到的图像的 s存储在EmbeddedDocument
被调用的Webpage
:
class Webpage(EmbeddedDocument):
image_list = ListField(ReferenceField(ImageUrl))
...
最后将Website
模型嵌入到RawData
模型中:
class RawData(Document):
...
webpage = EmbeddedDocumentField(Webpage)
我想ImageUrl
从RawData
记录中删除对记录的引用,基于它们的一些属性(例如:计数器值超过 1),然后将deleted
这些ImageUrl
记录的属性设置为True
.
我正在做:
images = ImageUrl.objects((Q(deleted=False) & Q(counter__gt=1)).all()
for image in images:
# all RadData records containing the image in their image list
for rdata in RawData.objects(webpage__image_list__in=[image.id]:
# remove image from the image_list
RawData.objects(id=rdata.id).update_one(pull__webpage__image_list=image.id)
# set 'deleted=True' on the ImageUrl record
ImageUrl.objects(id=image.id).update_one(set__deleted=True)
该pull
操作引发以下错误:
OperationError: Update failed [Cannot apply $pull/$pullAll modifier to non-array]
。
正如我从http://docs.mongodb.org/manual/reference/operator/pull/#_S_pull或How to remove a item from a list(ListField) by id in MongoEngine? ,我需要指定要从中删除值的数组的键。但是,就我而言,我想从列表中删除一个值......我应该怎么做?
非常感谢您的宝贵时间!