Python 用于将一个字段与另一个字段进行比较的Mongoengine查询

Python 用于将一个字段与另一个字段进行比较的Mongoengine查询,python,mongodb,flask,mongodb-query,mongoengine,Python,Mongodb,Flask,Mongodb Query,Mongoengine,这是一份文件 我想进行mongoengine查询,其中last_modified大于post_date 差不多 News.objects(上次修改日期=发布日期)\mongoengine查询 有什么方法可以进行这种类型的查询吗?在django中,您可以使用F进行查询,但由于F不适用于mongoengine,请使用where方法- class News(Document): news_id = IntField() post_date = DatetimeField() l

这是一份文件

我想进行mongoengine查询,其中last_modified大于post_date

差不多

News.objects(上次修改日期=发布日期)
\mongoengine查询


有什么方法可以进行这种类型的查询吗?

在django中,您可以使用
F
进行查询,但由于
F
不适用于mongoengine,请使用
where
方法-

class News(Document):
    news_id = IntField()
    post_date = DatetimeField()
    last_modified = DatetimeField()
根据mongoengine文档,“$where”子句将自动替换

query = "this.{last_modified}>this.{post_date}"

db_fields = {
    'last_modified': News._fields['last_modified'],
    'post_date': News._fields['post_date']
}

results = News.objects.where(query.format(*db_fields))

您可以直接查询mongodb-

 def where(self, where_clause):
 """Filter ``QuerySet`` results with a ``$where`` clause (a Javascript
    expression). Performs automatic field name substitution like
    :meth:`mongoengine.queryset.Queryset.exec_js`.

    .. note:: When using this mode of query, the database will call your
              function, or evaluate your predicate clause, for each object
              in the collection.

    .. versionadded:: 0.5
    """

注意:-您不应在mongo查询中硬编码db_字段名称。

在django中,您可以使用
F
进行此操作,但由于
F
不适用于mongoengine,请使用
where
方法-

class News(Document):
    news_id = IntField()
    post_date = DatetimeField()
    last_modified = DatetimeField()
根据mongoengine文档,“$where”子句将自动替换

query = "this.{last_modified}>this.{post_date}"

db_fields = {
    'last_modified': News._fields['last_modified'],
    'post_date': News._fields['post_date']
}

results = News.objects.where(query.format(*db_fields))

您可以直接查询mongodb-

 def where(self, where_clause):
 """Filter ``QuerySet`` results with a ``$where`` clause (a Javascript
    expression). Performs automatic field name substitution like
    :meth:`mongoengine.queryset.Queryset.exec_js`.

    .. note:: When using this mode of query, the database will call your
              function, or evaluate your predicate clause, for each object
              in the collection.

    .. versionadded:: 0.5
    """


注意:-您不应该在mongo查询中硬编码db_字段名称。

您是否查看了mongo引擎的文档?尝试使用
News.objects(上次修改的日期=F('post\u date'))
这里什么是
F
?它说F没有定义
namererror
以便使用django
F
操作符do
从django.db.models导入F
@Pynchia您能告诉我在您的评论中
F
是什么意思吗您检查了mongo引擎的文档了吗?尝试使用
News.objects(上次修改的日期=F('post\u date'))
这里什么是
F
?它说F没有定义
namererror
为了使用django
F
操作符do
从django.db.models导入F
@Pynchia你能告诉我在你的评论中
F
意味着什么吗既然
$where
直接在服务器上使用JavaScript,那么字段应该用JavaScript表示法指定吗只有如果符号正确,那么这应该是正确的。当他们询问“大于”时,使用“等于”运算符会产生误导。我已更改了我的答案,请查看这一个是否适合您删除插值,因为它不需要,即:“
”$where:“this.last\u modified>this.post\u date”
。不需要python的诡计。这是JavaScript。但我也投了票,因为原则基本上是正确的。然而,试图替换字符串值会使它失败。哎呀,我又坏了,我希望现在一切都好了。希望你让它变得更糟。读我说的话。JavaScript引擎查看的查询interpets对象。一旦发送到服务器,就根本没有与python的交互作用。实际上,我给了您正确的语法。由于
$where
直接在服务器上使用JavaScript,因此字段应仅以JavaScript表示法指定。如果符号正确,那么这应该是正确的。当他们询问“大于”时,使用“等于”运算符会产生误导。我已更改了我的答案,请查看这一个是否适合您删除插值,因为它不需要,即:“
”$where:“this.last\u modified>this.post\u date”
。不需要python的诡计。这是JavaScript。但我也投了票,因为原则基本上是正确的。然而,试图替换字符串值会使它失败。哎呀,我又坏了,我希望现在一切都好了。希望你让它变得更糟。读我说的话。JavaScript引擎查看的查询interpets对象。一旦发送到服务器,就根本没有与python的交互作用。实际上我给了你正确的语法。