我有一个包含多个文档的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查询所有文档,然后进行一些后处理才能获得唯一值?在任何情况下,语法都会受到赞赏。
首先,只能在某个字段(仅一个字段)上获得不同的值,如有关Distinct的MongoDB文档中所述。
Mongoengine的QuerySet类确实支持distinct()方法来完成这项工作。
QuerySet
因此,您可以尝试执行以下操作以获得结果:
Students.objects(name="Tom").distinct(field="class")
此查询将导致一个BSON文档包含 Tom 参加的课程的列表。
注意 请注意,返回值是单个文档,因此,如果返回值超过最大文档大小(16 MB),则会出现错误,在这种情况下,您必须切换到 映射/缩小 方法来解决此类问题。