0

mongodbとpythonを使用して2つの異なる結果が得られたようですcount()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 
4

2 に答える 2

2

クエリのうち 2 つは「distinct」を使用していますが、3 番目のクエリは使用していません。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
于 2012-10-06T22:22:24.043 に答える
2

mongodb.count()は、一致したドキュメントの総数のみを要求するサーバー側クエリを実行します。クエリで count コマンドを送信します。MongoDB はクライアント ドライバーに int のみを返します。

Python を使用するlen()と、mongodb クエリから返されたドキュメント数のクライアント側カウントが実行されます。これは、データベースから完全なドキュメントを受け取り、ローカルで操作していることを意味します。

カウントのみを知る必要がある場合は、結果が高速で小さいため、最初の方法の方が効率的です。

結果のドキュメントを使用する予定で、カウントも知りたい場合は、クエリの結果を変数に保存し、 を使用len()してそのサイズを確認します。そうすれば、カウントと実際のドキュメントを取得するために 2 つのクエリを実行する必要がなくなります。

これは、使用方法の違いに関するあなたの質問に対する主な回答です。他の人が指摘したように、比較しているクエリは、それ自体が異なります。

于 2012-10-06T22:30:48.313 に答える