我有这个数据库:
[{"cliente": {"nombre": "Cafes el amanencer"},
"mercancia": {"envio": "Normal", "tipo": "Gaseoso", "fecha": "24/12/2003", "peso": 21, "volumen": 43, "origen": "Cadiz", "destino": "Castellon"},
"vagon": {"id": 1330, "volumen": 202, "peso": 433 }},{"cliente": {"nombre": "Electronica Chispas"}, "mercancia": {"envio": "Normal", "tipo": "Liquido", "fecha": "08/02/2005", "peso": 17, "volumen": 24, "origen": "San Sebastian", "destino": "Orense"}, "vagon": {"id": 1290, "volumen": 111, "peso": 464 }},{"cliente": {"nombre": "Pepe Gotera y Otilio"}, "mercancia": {"envio": "Economico", "tipo": "Contaminante", "fecha": "14/03/2003", "peso": 2, "volumen": 49, "origen": "Santander", "destino": "Burgos"}, "vagon": {"id": 1100, "volumen": 323, "peso": 258 }},{"cliente": {"nombre": "Coches Coco"}, "mercancia": {"envio": "Normal", "tipo": "Explosivo", "fecha": "11/07/2002", "peso": 23, "volumen": 51, "origen": "Avila", "destino": "Santa Cruz de Tenerife"}, "vagon": {"id": 1183, "volumen": 171, "peso": 439 }},{"cliente": {"nombre": "Infraestructuras Fracturas"}, "mercancia": {"envio": "Urgente primera hora", "tipo": "Fragil", "fecha": "07/08/2000", "peso": 53, "volumen": 3, "origen": "Tarragona", "destino": "Soria"}, "vagon": {"id": 1454, "volumen": 408, "peso": 101 }}]
有更多的数据,但要解决这个问题,它会做的。因此,我尝试寻找两件事(查询):
第一个:一个包含3个“destinos”的列表,其中发送最多的是“mercancias”,以及它们的数量,对于“origen”和“fecha”,在本例中,是我在查询中使用的一个:
db.mercancias.aggregate(['$project':{origen:'origen', destino:'destino', anio:'fecha'},
{$match: 'origen':'San Sebastian', $year:{'fecha':08/02/2005}},
{$group:{'_id':{'$destino', '$anio'}}},{ maximo:{$max:{$count:{'_id':'envio'}}},{$limit:3}}])
我不确定查询失败的地方,或者它是否真的与语法有关。你知道吗
在第二个例子中,我试图得到一个“mercancias”的列表,其中“destino”靠近一些坐标(最大100公里),按距离排序(我对这个例子很迷茫,我不知道如何确定坐标,但是我已经用python编程了geoNear,所以问题主要出在查询中)。我也希望它是一个聚合查询,但正如我所说的,我完全不知道我是如何把它弄错的。你知道吗
db.mercancias.find([{$geoNear:{'near:{'type':'Point', 'coordinates':coordinates}maxDistance':100,'distanceField':'dist.calculated'}}])
任何你认为我需要添加的问题,使它更清楚,我会很高兴地编辑它。你知道吗
对于第一个阶段,我认为必须使用
project
阶段才能使所有所需的数据处于同一级别,然后,可以在$year
阶段中使用$fecha
你有很多语法错误。你要做的第一件事就是把语法弄好。我会试着列出所有可能解决的问题。你知道吗
项目:
1.缺少开合撑杆。你知道吗
2.缺少访问嵌入字段以及变量引用$的点符号。你知道吗
修正:
匹配:
1.您正在将查询运算符与聚合运算符组合,这在常规匹配中是不允许的。你知道吗
2.缺少查询条件的大括号。你知道吗
3.支持的日期格式为MM/DD/YYYY。你知道吗
修正:
1.将
$match
与$expr
一起使用。你知道吗2.为查询条件添加左大括号和右大括号。你知道吗
3.将字符串日期格式更改为存储为12/24/2003。你知道吗
集团:
Fix:(不确定您在这里想要什么,但看起来您想要按
destino
&;envio
分组并计算它们的出现次数并按计数降序排序。你知道吗把它们放在一起。你知道吗
数据:
查询:
输出:
相关问题 更多 >
编程相关推荐