mongodb:使用$lte和$gte的问题

mongodb:使用$lte和$gte的问题,mongodb,pymongo,Mongodb,Pymongo,看看这个奇怪的结果: 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('506867863a5f3a0ea84dc

看看这个奇怪的结果:

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+'
它在Mongo Shell中给出了相同的结果:

db.version() 
2.2.0 

下面是伯尼·哈克特的答案

“produit\u up.spec.prix”有三个值,分别为1000、20000和500000。 为什么你会认为{“$gte”:0,$lte:100}会与以下任何一个匹配 那些价值观?100小于所有这些值。 {“$gte”:0,“$lte”:1000}返回所有三个文档的原因 它们都是数组中的子文档。因为其中一个 数组中的子文档与整个随附文档匹配 与您的查询匹配。因为你只做了一个投影 “produit_up”,只是该数组(包括所有数组成员)是 返回。在MongoDB 2.2中使用$elemMatch仅返回准确的 匹配数组元素。 MongoDB和PyMongo按照这里的设计工作

要获得我认为您要求的行为,请参阅$elemMatch操作符:


那你解决这个问题了吗?从线索上看,你没有对不起,我刚刚在谷歌群组中收到了答案,我会标记答案