Python 过滤引擎查询

Python 过滤引擎查询,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我在过滤查询时遇到一些问题,我不知道为什么。我所有的其他过滤器都工作得很好 首先,我有一个mongoDB集合,其中的数据如下所示: _id: generated title: stringfield date: Datefield Responses: EmbeddedDocument user: ReferenceField help: BooleanField queryset.filter( __raw__= {'responses.user': current_u

我在过滤查询时遇到一些问题,我不知道为什么。我所有的其他过滤器都工作得很好

首先,我有一个mongoDB集合,其中的数据如下所示:

_id: generated
title: stringfield
date: Datefield
Responses: EmbeddedDocument 
    user: ReferenceField
    help: BooleanField
queryset.filter(
  __raw__= {'responses.user': current_user.id, 'responses.help' = True}
).count
存储在DB中的当前响应(所有响应都具有相同的用户):

  • 2次响应。帮助=错误
  • 2次响应。帮助=真
现在我想知道用户回答问题的次数:

@queryset_manager
def responses_user(doc_cls, queryset):
    return queryset.filter(responses__user=current_user.id).count
上面的查询是有效的,它会返回正确数量的响应(4)。现在我想给它添加一个过滤器,因为我想知道te用户响应True的次数。因此,查询变成:

@queryset_manager
def responses_user(doc_cls, queryset):
    return queryset.filter(responses__user=current_user.id, responses__help=True).count
现在我得到了一个我不明白的结果。它给了我3分。应该是2。关于这一点,我不了解两件事:

  • 为什么它会返回3?这真是个奇数
  • 为什么我的查询不起作用
  • 仅供参考,我打电话的方式是:

    responses = Questions.responses_user()
    
    所以这不是我认为的问题,我可以使用嵌套字段,如下所示:

    _id: generated
    title: stringfield
    date: Datefield
    Responses: EmbeddedDocument 
        user: ReferenceField
        help: BooleanField
    
    queryset.filter(
      __raw__= {'responses.user': current_user.id, 'responses.help' = True}
    ).count
    
    我可以使用嵌套字段,如下所示:

    _id: generated
    title: stringfield
    date: Datefield
    Responses: EmbeddedDocument 
        user: ReferenceField
        help: BooleanField
    
    queryset.filter(
      __raw__= {'responses.user': current_user.id, 'responses.help' = True}
    ).count
    

    您是否在开始插入文档后修改了模型?此外,还可以从mongo shell中检查文档的原始格式,也许您可以找到问题所在似乎删除了整个问题集合并创建了新问题。我无法找到此查询函数的更改。谢谢你的提示!您是否在开始插入文档后修改了模型?此外,还可以从mongo shell中检查文档的原始格式,也许您可以找到问题所在似乎删除了整个问题集合并创建了新问题。我无法找到此查询函数的更改。谢谢你的提示!这应该与mongoengine将:
    .filter(responses\uu user=current\u user.id,responses\uu help=True)
    转换为pymongo的方式完全相同,因此我会惊讶于它解决了问题,这使得请求更加明确。如果像id这样的字段没有被混淆,那么有问题的查询本身应该可以工作。据我所知,“帮助”、“用户”不是系统的名称,但我通常会再保险。这是我脑海中唯一的想法。这应该与mongoengine应该如何翻译完全相同:
    .filter(responses\uu user=current\u user.id,responses\uu help=True)
    到pymongo,所以我会惊讶地发现它解决了问题,这使得请求更加明确。如果像id这样的字段没有被混淆,那么有问题的查询本身应该可以工作。据我所知,“帮助”、“用户”不是系统的名称,但我通常会再保险。这是我唯一想到的想法。