似乎我使用mongodb count()
和python len()
db.users.find({"adresse.coord":{"$within":{"$center":[[4.365041,36.743954],100]}}}).distinct("produit_up")
Out[17]:
[{u'avatar': {u'avctype': u'image/jpeg',
u'orientation': u'portrait',
u'photo': ObjectId('506f2ee93a5f3a0528ab8621')},
u'spec': {u'abus': 0,
u'date': u'2012-10-05',
u'description': u'brrrrrrrrrrr',
u'id': u'tofla134946378579',
u'namep': u'nokia 6230',
u'nombre': 2,
u'prix': 1000,
u'tags': [u'nokia', u'6230', u'photo'],
u'vendu': False}},
{u'avatar': {u'avctype': u'image/jpeg',
u'orientation': u'portrait',
u'photo': ObjectId('506867863a5f3a0ea84dcd6c')},
u'spec': {u'abus': 0,
u'date': u'2012-09-30',
u'description': u"portable tr\xe8s solide, peu servi, avec batterie d'une autonomie de 3 heures.",
u'id': u'alucaard134901952647',
u'namep': u'nokia 3310',
u'nombre': 1,
u'prix': 1000,
u'tags': [u'portable', u'nokia', u'3310'],
u'vendu': False}},
{u'avatar': {u'avctype': u'image/jpeg',
u'orientation': u'portrait',
u'photo': ObjectId('506f2b3e3a5f3a0b3c4731a9')},
u'spec': {u'abus': 0,
u'date': u'2012-10-05',
u'description': u'bzzzzzzzzzz',
u'id': u'alucaard134946284638',
u'namep': u'nokia 6230',
u'nombre': 1,
u'prix': 2000,
u'tags': [u'nokia', u'nok', u'noki'],
u'vendu': False}}]
db.users.find({"adresse.coord":{"$within":{"$center":[[4.365041,36.743954],100]}}}).count()
Out[18]: 2
len(db.users.find({"adresse.coord":{"$within":{"$center":[[4.365041,36.743954],100]}}}).distinct("produit_up"))
Out[19]: 3
答案 0 :(得分:2)
您的两个查询使用“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
答案 1 :(得分:2)
mongodb .count()
将执行服务器端查询,该查询仅请求匹配的文档总数。它在查询中发送count命令。 MongoDB只会将int返回给您的客户端驱动程序。
使用python len()
将执行从mongodb查询返回的文档数的客户端计数。这意味着您将从数据库接收完整文档,并在本地对其进行操作。
如果您只需要知道计数,那么第一个更有效率,因为结果更快更小。
如果您打算使用生成的文档并且还想知道计数,请将查询结果保存到变量中,然后使用len()
检查其大小。这样您就不必执行两个查询来获取计数+实际文档。
这是您关于其使用之间差异的问题的主要答案。正如其他人所指出的那样,您所比较的查询本身就是不同的。