我有这个数据库:
[{"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}}])
我不确定查询失败的地方,或者它是否真的与语法有关。
在第二个中,我试图得到一个“destino”的列表,其中“destino”靠近一些坐标(最大 100 公里),按距离顺序排序(我对这个很迷茫,我不知道如何确定坐标,但我已经在 python geoNear 中编程,所以问题主要出在查询中)。我也想成为一个聚合查询,但正如我所说的,我对我是如何弄错的感到很迷茫。
db.mercancias.find([{$geoNear:{'near:{'type':'Point', 'coordinates':coordinates}maxDistance':100,'distanceField':'dist.calculated'}}])
您认为我需要添加任何问题以使其更清楚,我将很乐意对其进行编辑。
你有很多语法错误。您必须做的第一件事是正确使用语法。我会尝试列出所有可能修复的问题。
项目:
'$project':{origen:'origen', destino:'destino', anio:'fecha'}
1.缺少开闭括号。
2.缺少点符号来访问嵌入的字段以及变量引用 $。
使固定:
{'$project':{origen:'$mercancia.origen', destino:'$mercancia.destino'; anio:'$mercancia.fecha', envio:'$mercancia.envio'}}
比赛:
{$match: 'origen':'San Sebastian', $year:{'fecha':08/02/2005}}
1.您将查询运算符与聚合运算符结合使用,这在常规匹配中是不允许的。
2.缺少查询条件的左大括号。
3.支持的日期格式为MM/DD/YYYY。
使固定:
1.$match
配合使用$expr
。
2.为查询条件添加左括号和右括号。
3.更改字符串日期格式以存储为 12/24/2003。
{$match:{
'origen':'San Sebastian',
$expr:{$eq:[{$year:{$dateFromString:{dateString:"$anio"}}}, input year ]}
}}
团体:
{$group:{ '_id':{'$destino', '$anio'}}},{ maximo:{$max:{$count:{'_id':'envio'}}}
修复:(不确定您在这里的意图,但看起来您想要按destino
&分组envio
并计算它们的出现次数并按计数降序排序。
{$group: {_id:{'destino':'$destino', 'envio':'$envio'}, count:{$sum:1} }},
{$count:{sum:-1}}
把它放在一起。
数据:
db.mercancias.insert([
{"cliente": {"nombre": "Cafes el amanencer"}, "mercancia": {"envio": "Normal", "tipo": "Gaseoso", "fecha": "12/24/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": "02/08/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": "03/14/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": "07/11/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": "08/07/2000", "peso": 53, "volumen": 3, "origen": "Tarragona", "destino": "Soria"}, "vagon": {"id": 1454, "volumen": 408, "peso": 101 }}
])
询问:
db.mercancias.aggregate([
{'$project':{origen:'$mercancia.origen', destino:'$mercancia.destino', anio:'$mercancia.fecha', envio:'$mercancia.envio'}},
{$match:{
'origen':'San Sebastian',
$expr:{$eq:[{$year:{$dateFromString:{dateString:"$anio"}}}, 2005]}
}},
{$group: {_id:{'destino':'$destino', 'envio':'$envio'}, count:{$sum:1} }},
{$sort:{count:-1}},
{$limit:3}
]);
输出:
{ "destino":"Orense", "envio":"Normal", "count" : 1}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句