Python 用于将一个字段与另一个字段进行比较的Mongoengine查询
这是一份文件 我想进行mongoengine查询,其中last_modified大于post_date 差不多 News.objects(上次修改日期=发布日期)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查询
有什么方法可以进行这种类型的查询吗?在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
以便使用djangoF
操作符do从django.db.models导入F
@Pynchia您能告诉我在您的评论中F
是什么意思吗您检查了mongo引擎的文档了吗?尝试使用News.objects(上次修改的日期=F('post\u date'))
这里什么是F
?它说F没有定义namererror
为了使用djangoF
操作符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的交互作用。实际上我给了你正确的语法。