Mongoengine:查询引用字段不返回任何结果,但字段在对象上有效

 犹豫的海波V5_697 发布于 2022-12-29 10:38

简化,我有两个文件,一个包和一个目标.包中包含目标的DBref()列表,目标包含包的DBRef.简化它的设置如下:

class Target(Document):

    package = ReferenceField('Package')
    name = StringField()


class Package(Document):

    targets = ListField(ReferenceField('Target'))
    name = StringField()

当我创建一组目标时,使用mongoengine的标准方法按预期工作:

# in a method on Package, self = current Package instance
target = Target(name="My Name", package=self).save()
self.targets.insert(0, targets)

我可以通过该包查询目标,并按预期返回结果:

>>> p = Package.objects.get(id='53e4db7bc57d207fc3d70738')
>>> Target.objects(name="My Name", package=p)
[]

但对于某些目标,我们一次创建很多,而是使用批量执行来创建文档(简化):

bulk = Target._get_collection().initialize_unordered_bulk_op()
for line in csv_reader:
    entry = dict(zip(header, line))
    entry.update({'name': 'My Name', '_cls': 'Target', 'package': package.to_dbref()})

    bulk.find({'name': 'My Name', 'package': package.to_dbref()}).upsert().update({'$set': entry})

bulk.execute()

这些对象看起来完全正常,但是,即使读取它们的值似乎没有问题,引用它们的包的查询也不起作用.

(Pdb) self
 
(Pdb) Target.objects(name="My Name", package=self)
[]
(Pdb) Target.objects(name="My Name")
[]
(Pdb) Target.objects(name="My Name")[0].package

即使做一个to_json对象似乎看起来可比:

>>> bad_target.to_json()
'{"_id": {"$oid": "53e4334cd2f370649dce5e20"}, "_cls": "Target", "package": {"$oid": "53e4334cc57d207f0a86a3c7"}, "name": "Bad Target"}'

>>> good_target.to_json()
'{"_id": {"$oid": "53e4db7bc57d207fc3d70739"}, "_cls": "Target", "package": {"$oid": "53e4db7bc57d207fc3d70738"}, "name": "Good Target"}'

似乎相当清楚的是,bulk操作可能是这里的罪魁祸首,但据我所知,它正确地完成并且正常操作(例如检索引用Package对象)按预期工作,但查询将不会返回任何内容.任何想法或建议将非常感谢!


更新新信息

使用原始pymongo查询会产生一些更有趣的结果:

>>> Target.objects(__raw__={"name": "My Name", "package": p.to_dbref()})
[]
>>> Target.objects(__raw__={"name": "My Name", "package": p.id})
[]

这似乎更多地表明,拯救目标的本质确实是问题所在.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有