当前位置: 首页 > 面试题库 >

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

范麒
2023-03-14
问题内容

我有一个包含多个文档的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()方法来完成这项工作。

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

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

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

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



 类似资料:
  • 问题内容: 我一直在寻找如何将MongoDB查询结果流式传输到nodejs客户端的示例。到目前为止,我发现的所有解决方案似乎都是立即读取查询结果,然后将结果发送回服务器。 相反,我(显然)想为查询方法提供一个回调,并在结果集的下一个块可用时让MongoDB调用它。 我一直在看猫鼬-我是否应该使用其他驱动程序? 一月 问题答案: 在Mongoose中进行流式处理的版本为2.4.0,该版本在发布此问题

  • 学生拥有诸如 并且有这样的文档 还有一个名为“学生-课程”的第三个集合,我在那里保存了学生的id和他们相应的课程id。像这样

  • 如何在Grafana的同一面板中使用来自不同查询的prometheus查询结果。 实例 我在格拉法纳有3个普罗米修斯查询,

  • 本文向大家介绍如何使用LIMIT查询MongoDB?,包括了如何使用LIMIT查询MongoDB?的使用技巧和注意事项,需要的朋友参考一下 使用limit()方法查询MongoDB。让我们创建一个包含文档的集合 在find方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是在MongoDB中使用LIMIT的查询- 这将产生以下输出-

  • 问题内容: 我正在尝试在mongodb中执行查询日期,但结果始终为空。我的查询如下: //变量resultaMongo返回空。 Obs:我也尝试不使用.isoformat(),当我直接放入mongodb时,只有添加ISODate才返回结果。因此不会返回结果: 更重要的是,如果您编辑返回: 这是数据库中的记录序列: 如果我打印python的json变量,则会看到类似以下内容的内容: 我的Mongnd

  • 我一直在使用jmeter对mongodb进行加载测试,接下来我将使用一个具有这些数据的不同的db 我已经在这里保存了已保存的mongoHost,mongoPort,databaseName,collectionName jmeter变量 这个连接测试通过了,但我无法从数据库中获取、读取任何数据并通过测试,这是代码 错误 谢谢你