mongodb count()和python内置len()之间有区别吗

mongodb count()和python内置len()之间有区别吗,python,mongodb,pymongo,Python,Mongodb,Pymongo,使用mongodbcount()和pythonlen() 您的两个查询使用“distinct”,但第三个查询不使用-它只使用count()。我不希望从不同类型的查询中得到相同数量的结果 考虑以下学生集合示例: {name:"joe", class: ["biology","math"]} {name:"jane", class: ["math", "english"]} db.students.find().count() 2 db.students.find().distinct("

使用mongodb
count()
和python
len()

您的两个查询使用“distinct”,但第三个查询不使用-它只使用count()。我不希望从不同类型的查询中得到相同数量的结果

考虑以下学生集合示例:

{name:"joe", class: ["biology","math"]}
{name:"jane", class: ["math", "english"]}

db.students.find().count()    
2
db.students.find().distinct("class")
["biology","math","english"]
len(db.students.find().distinct("class"))
3
您的两个查询使用“distinct”,但第三个查询不使用-它只使用count()。我不希望从不同类型的查询中得到相同数量的结果

考虑以下学生集合示例:

{name:"joe", class: ["biology","math"]}
{name:"jane", class: ["math", "english"]}

db.students.find().count()    
2
db.students.find().distinct("class")
["biology","math","english"]
len(db.students.find().distinct("class"))
3
mongodb将执行服务器端查询,只请求匹配的文档总数。它在查询中发送count命令。MongoDB将只向客户端驱动程序返回int

使用python
len()
将对mongodb查询返回的文档数执行客户端计数。这意味着您正在从数据库接收完整的文档,并在本地对其进行操作

如果您只需要知道计数,那么第一个更有效,因为结果更快、更小

如果您计划使用结果文档,并且还想知道计数,则将查询结果保存到一个变量中,并使用
len()
检查其大小。这样,您就不必执行两次查询来获取计数+实际文档

这是您关于它们的用法差异的问题的主要答案。正如其他人所指出的,您正在比较的查询本身是不同的。

mongodb将执行服务器端查询,只请求匹配的文档总数。它在查询中发送count命令。MongoDB将只向客户端驱动程序返回int

使用python
len()
将对mongodb查询返回的文档数执行客户端计数。这意味着您正在从数据库接收完整的文档,并在本地对其进行操作

如果您只需要知道计数,那么第一个更有效,因为结果更快、更小

如果您计划使用结果文档,并且还想知道计数,则将查询结果保存到一个变量中,并使用
len()
检查其大小。这样,您就不必执行两次查询来获取计数+实际文档


这是您关于它们的用法差异的问题的主要答案。正如其他人所指出的,您正在比较的查询本身是不同的。

后者是不同的-
distinct()
最终是不同的,这是故意的吗?它应该给我3个结果,但计数忽略了一个结果,所以为什么会发生这种情况?我首先认为您指的是标准的内置序列
.count()
方法,仅基于您的问题标题:-PIs“produit_up”是嵌入到文档中的数组?每个文档是否有一个?看起来您的查询匹配了两个文档,但它们之间有三个不同的“produit\u up”值。为什么你认为这是不一致的?返回3的两个查询是相同的,返回2的查询是不同的。后者是不同的-
distinct()
在末尾,这是故意的吗?它应该给我3个结果,但计数忽略了一个结果,所以为什么会发生这种情况?我首先认为你指的是标准的内置序列
.count()
方法,仅根据您的问题标题:-PIs“produit_up”是嵌入到文档中的数组?每个文档是否有一个?看起来您的查询匹配了两个文档,但它们之间有三个不同的“produit\u up”值。为什么你认为这是不一致的?返回3的两个查询相同,返回2的查询不同。啊,谢谢!所以这是两个不同的问题!因为我认为当结果是Python时,那么这就是Python的方式@Abdelouahapp:别忘了,使用
游标
对象,您可以继续添加更多ORM命令,例如
distinct
count
。只有当您开始从迭代器计算其值时,查询才会执行。@Abdelouahapp:正如我在回答中所说的,
count
如果您不需要文档,则效率更高。在服务器的响应中需要处理的工作量和数据要少得多。啊!因为我是一名初学者,我的工作方式如下:我进行查询,然后使用字典/列表操作尝试提取我想要的数据,我正在制作一个简单的电子商务项目,完成后我将与大家分享:)再次感谢:)啊,谢谢!所以这是两个不同的问题!因为我认为当结果是Python时,那么这就是Python的方式@Abdelouahapp:别忘了,使用
游标
对象,您可以继续添加更多ORM命令,例如
distinct
count
。只有当您开始从迭代器计算其值时,查询才会执行。@Abdelouahapp:正如我在回答中所说的,
count
如果您不需要文档,则效率更高。在服务器的响应中需要处理的工作量和数据要少得多。啊!因为我是一名初学者,我的工作方式如下:我进行查询,然后使用字典/列表操作尝试提取我想要的数据,我正在制作一个简单的电子商务项目,完成后我将与大家分享:)再次感谢:)