2012-10-01 2 views
0

모양을 사용하여 문제 :

list(db.users.find({"produit_up.spec.prix":{"$gte":0, "$lte": 1000}}, {"_id":0,"produit_up":1})) 
Out[5]: 
[{u'produit_up': [{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('50686d013a5f3a04a8923b3e')}, 
u'spec': {u'abus': 0, 
u'date': u'2012-09-30', 
u'description': u'\u0646\u0628\u064a\u0639 \u0623\u064a \u0641\u0648\u0646 \u062c\u062f\u064a\u062f \u0641\u064a \u0627\u0644\u0628\u0648\u0627\u0637 \u0645\u0639\u0627\u0647 \u0634\u0627\u0631\u062c\u0648\u0631 \u062f\u0648\u0631\u064a\u062c \u064a\u0646', 
u'id': u'alucaard134902092967', 
u'namep': u'iphone 3gs', 
u'nombre': 1, 
u'prix': 20000, 
u'tags': [u'iphone', u'3gs', u'apple'], 
u'vendu': False}}, 
{u'avatar': {u'avctype': u'image/jpeg', 
u'orientation': u'paysage', 
u'photo': ObjectId('50686d3e3a5f3a04a8923b40')}, 
u'spec': {u'abus': 0, 
u'date': u'2012-09-30', 
u'description': u'vends 206 toutes options 2006 hdi.', 
u'id': u'alucaard134902099082', 
u'namep': u'peugeot 206', 
u'nombre': 1, 
u'prix': 500000, 
u'tags': [u'voiture', u'206', u'hdi'], 
u'vendu': False}}]}] 

list(db.users.find({"produit_up.spec.prix":{"$gte":0, "$lte": 100}}, {"_id":0,"produit_up":1})) 

Out[6]: [] 

pymongo.version 

Out[8]: '2.3+' 

그것은 나에게 몽고 셸에서 동일한 결과를 제공합니다 : 여기

db.version() 
2.2.0 
+0

https://groups.google.com/group/mongodb-user/browse_thread/thread/9cfb62609de046ee :

내가 당신이 $ elemMatch 연산자를 참조 요구하고 생각하는 행동을 얻으려면? hl = fr –

+1

그런 다음이 문제를 해결 했습니까? 거기 스레드에 의해 – Sammaye

+0

미안 해요, 난 그냥 Google 그룹에 대답을받은, 나는 대답을 표시거야 –

답변

2

버니 해켓의 답변입니다 MATC 것

당신은 500000 가 왜 {: 0, "$의 LTE"100 "$ GTE"} 생각 것 "produit_up.spec.prix", 1000, 20000, 세 값이 h 중 하나라도 해당 값이 입니까? 100이 모든 값보다 적습니다. { "$ gte": 0, "$ lte": 1000}이 세 문서 모두 을 반환하는 이유는 배열에있는 모든 하위 문서라는 것입니다. 배열의 하위 문서 중 하나가 과 일치하기 때문에 전체 문서 인 은 검색어와 일치합니다. "produit_up"에만 투영 했으므로 해당 배열 (모든 배열 구성원 포함)은 이 반환됩니다. MongoDB 2.2에서 $ elemMatch를 사용하여 일치하는 배열 요소 인 만 반환하십시오. MongoDB와 PyMongo는 여기서 설계된대로 작동합니다. http://docs.mongodb.org/manual/reference/projection/elemMatch/