如何使用python在mongodb中查询不同的结果?

发布于 2021-01-29 14:11:16

我有一个包含多个文档的mongo集合,假设以下内容(假设出于任何原因,汤姆在2012年都有两名历史老师)

{
"name" : "Tom"
"year" : 2012
"class" : "History"
"Teacher" : "Forester"
}

{
"name" : "Tom"
"year" : 2011
"class" : "Math"
"Teacher" : "Sumpra"
}


{
"name" : "Tom",
"year" : 2012,
"class" : "History",
"Teacher" : "Reiser"
}

我希望能够查询“汤姆”曾经有过的所有不同的班级,即使汤姆有多个“历史”班级且有多个老师,我只想查询得到最少数量的文档,以便汤姆在所有这些都将显示一次,而“历史记录”只显示一次,而不是查询结果包含重复“历史记录”的多个文档。

我看了一下:http : //mongoengine-
odm.readthedocs.org/en/latest/guide/querying.html

并希望能够尝试以下操作:

student_users = Students.objects(name = "Tom", class = "some way to say distinct?")

尽管它似乎没有记录在案。如果这不是语法上正确的方法,那么在mongoengine中是否可行,或者是否有某种方法可以使用其他类似pymongo的库来完成?还是我必须使用Tom查询所有文档,然后进行一些后处理才能获得唯一值?在任何情况下,语法都会受到赞赏。

关注者
0
被浏览
144
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    首先,只能在某个字段(仅一个字段)上获得不同的值,如有关Distinct的MongoDB文档中所述。

    Mongoengine的QuerySet类确实支持distinct()方法来完成这项工作。

    因此,您可以尝试执行以下操作以获得结果:

    Students.objects(name="Tom").distinct(field="class")
    

    此查询将导致一个BSON文档包含 Tom 参加的课程的列表。

    注意 请注意,返回值是单个文档,因此,如果返回值超过最大文档大小(16 MB),则会出现错误,在这种情况下,您必须切换到 映射/缩小
    方法来解决此类问题。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看