Estoy tratando de obtener todos los valores (que son matrices) del tipo "coordenada" en mis datos así:
[ ["51.50064317423898","-0.09372711181640626"], ["51.48465408363687","-0.13149261474609378"] ]Probé db. collections("mydb").distinct("coordinate") pero obtengo:
[ '-0.09372711181640626', '-0.13149261474609378', '51.48465408363687', '51.50064317423898' ]¿Alguien tiene una idea de cómo puedo tener todas mis matrices como quiero y no ordenadas en una matriz? "mydb" se ve así:
{ "name":"dfbfdbf", "coordinate":["51.50064317423898","-0.09372711181640626"], "rating":"8", "description":"geojzglijsen" }, { "name":"qzfgs", "coordinate":["51.48465408363687","-0.13149261474609378"], "rating":"5", "description":"femkndsmnk" }¡Gracias!
Si necesita obtener coordenadas distintas de su colección:
mongos> db.a.find() { "_id" : ObjectId("619ea12e032deead586f3f91"), "name" : "dfbfdbf", "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] } { "_id" : ObjectId("619ea138032deead586f3f92"), "name" : "a", "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] } { "_id" : ObjectId("619ea14c032deead586f3f93"), "name" : "a", "coordinate" : [ "51.50064317423898", "-0.19372711181640626" ] } { "_id" : ObjectId("619ea157032deead586f3f94"), "name" : "a", "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] } { "_id" : ObjectId("619ea15b032deead586f3f95"), "name" : "a", "coordinate" : [ "52.50064317423898", "-0.09372711181640626" ] } { "_id" : ObjectId("619ea160032deead586f3f96"), "name" : "a", "coordinate" : [ "52.50064317423898", "-0.09372711181640626" ] } mongos> db.a.aggregate([ { $addFields:{coordinates:{$reduce:{ input: {$slice:["$coordinate",1,{$size:"$coordinate"} ]},initialValue:{$arrayElemAt:["$coordinate",0]},in:{$concat:["$$value",";","$$this" ]} }} }} , { $group:{_id:"$coordinates" , cnt:{$sum:1}}} , { $project : { coordinate : { $split: ["$_id", ";"] } ,_id:0}} ]) { "coordinate" : [ "51.50064317423898", "-0.19372711181640626" ] } { "coordinate" : [ "51.50064317423898", "-0.09372711181640626" ] } { "coordinate" : [ "52.50064317423898", "-0.09372711181640626" ] } mongos>Ejemplo: aquí
explicado: Eliminar coordenadas duplicadas de la colección
Esta solución no tiene limitación de tamaño de resumen de matriz de coordenadas distintas de 16 MB también...
Si he entendido correctamente, puede probar esta consulta agregada:
El punto es $group by null para obtener todos los valores y usar $addToSet que evita los valores duplicados.
db.collection.aggregate([ { "$group": { "_id": null, "coordinate": { "$addToSet": "$coordinate" } } }, { "$project": { "_id": 0 } } ])Ejemplo aquí donde he duplicado un objeto para ver cómo no se muestra el valor repetido.