gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:26:00 26 4
gpt4 key购买 nike

我有一个包含多个文档的 mongo 集合,假设如下(假设 Tom 在 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"
}

我希望能够查询“Tom”曾经上过的所有不同的类(class),即使 Tom 有多个教师的多个“历史”类(class),我只希望查询获得最少数量的文档,例如Tom 在所有这些文件中,并且“历史”只显示一次,而不是包含多个文档的查询结果重复“历史”。

我看了看: 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()方法来完成这项工作。

所以你可以尝试这样的方法来获得结果:

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

此查询生成一个 BSON 文档,其中包含 Tom 参加的类(class)列表。

Attention Note that returned value is a single document, so if it exceeds max document size (16 MB), you'll get error and in that case you have to switch to map/reduce approach to solve such kind of problems.

关于python - 如何使用 python 在 mongodb 中查询不同的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12007726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com