【问题标题】:Can't use "gte" in mongoengine filter query不能在 mongoengine 过滤器查询中使用“gte”
【发布时间】:2020-01-24 12:56:46
【问题描述】:

我有一个 MongoEngine 文档类 Student..

class Student(Document):
    db_id = StringField()
    name = StringField()
    score = IntField()
    deleted = BooleanField(default=False, required=True)

我想查询为

Student.objects.filter(score__gte=30)

但我收到了类似 AttributeError: 'int' object has no attribute 'get'

之类的错误

有人可以帮助我如何做到这一点吗?谢谢!

【问题讨论】:

    标签: python mongoengine


    【解决方案1】:

    以下(最小的)sn-p 工作正常

    from mongoengine import *
    connect()
    
    class Student(Document):
        name = StringField()
        score = IntField()
    
    Student(name='Bob', score=35).save()
    
    print(Student.objects(score__gte=30))
    # output: [<Student: Student object>]
    

    我运行你的代码没有任何问题,也许从我的开始并在上面构建,直到你找出罪魁祸首。我还建议您在测试之前删除现有的 mongo 集合。

    事实上,根据触发错误的位置(我们没有堆栈跟踪,所以我们无法判断),可能是在将现有的 mongo 文档(由您的查询返回)加载到学生构造函数

    【讨论】:

    • 感谢回复
    • 如果分数将是列表字段,我如何计算分数数组必须大于 0?
    • 如果scores = ListField(IntField()) 并且您想要返回所有至少1 分> 0 的学生,您需要使用Student.objects(scores__gte=0)。如果您需要查询分数的总和,那么您需要使用aggregation 管道,但这更复杂
    • 是的,它可以工作,但如果字段类似于 score=ListField(embeddedDocumentFIeld(Scores)),那么我如何计算大于 0 的 score 字段?
    • 这偏离了最初的问题,并且 StackOverflow 的评论不是最好的沟通方式。如果对您有帮助,请考虑接受/支持答案。如果您需要更多支持,请在 github 项目 (github.com/MongoEngine/mongoengine/issues) 中打开一个问题,并确保在描述中添加您的 2 个相应的类(class Student(Document)class Scores(EmbeddedDocument))。我是 MongoEngine 的贡献者,所以我会在那里帮助你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2020-08-19
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2011-07-11
    相关资源
    最近更新 更多