sentencias mongo ejemplos diferente consultas comandos avanzado anidadas actualizar mongodb sorting mongodb-java

mongodb - ejemplos - Mongo DB clasificación con mayúsculas y minúsculas



mongodb consultas anidadas (5)

Aquí está en Java. BasicDBObject no-args y las primeras variantes de key-val de BasicDBObject solo para variedad

DBCollection coll = db.getCollection("foo"); List<DBObject> pipe = new ArrayList<DBObject>(); DBObject prjflds = new BasicDBObject(); prjflds.put("field", 1); prjflds.put("insensitive", new BasicDBObject("$toLower", "$field")); DBObject project = new BasicDBObject(); project.put("$project", prjflds); pipe.add(project); DBObject sort = new BasicDBObject(); sort.put("$sort", new BasicDBObject("insensitive", 1)); pipe.add(sort); AggregationOutput agg = coll.aggregate(pipe); for (DBObject result : agg.results()) { System.out.println(result); }

Me gustaría obtener una forma ordenada de nombres de mongodb. Lo había hecho a través de la siguiente

query.sort().on("name", Order.ASCENDING)

con esta ejecución de consulta, pude encontrar los resultados ordenados con mayúsculas y minúsculas. Pero solo quiero obtener los resultados en forma de caso ignorado. ¿Cómo hacerlo? Por favor, guíame a través de esto.

Estoy trabajando en el código de Java. Así que por favor sugiérame con los métodos apropiados.



La ordenación funciona así en MongoDB pero puedes hacerlo sobre la marcha con agregado:

Tome los siguientes datos:

{ "field" : "BBB" } { "field" : "aaa" } { "field" : "AAA" }

Entonces con la siguiente declaración:

db.collection.aggregate([ { "$project": { "field": 1, "insensitive": { "$toLower": "$field" } }}, { "$sort": { "insensitive": 1 } } ])

Produciría resultados como:

{ "field" : "aaa", "insensitive" : "aaa" }, { "field" : "AAA", "insensitive" : "aaa" }, { "field" : "BBB", "insensitive" : "bbb" }

El orden real de inserción se mantendrá para cualquier valor que resulte en la misma clave cuando se convierta.


Resolvemos este problema con la ayuda de la función .sort en la matriz de JavaScript

Aquí está el código

function foo() { let results = collections.find({ _id: _id }, { fields: { ''username'': 1, } }).fetch(); results.sort((a, b)=>{ var nameA = a.username.toUpperCase(); var nameB = b.username.toUpperCase(); if (nameA nameB) { return 1; } return 0; }); return results; }


Actualización: esta respuesta está desactualizada, 3.4 tendrá índices insensibles a mayúsculas y minúsculas. Consulte la JIRA para obtener más información https://jira.mongodb.org/browse/SERVER-90

Desafortunadamente, MongoDB todavía no tiene índices insensibles a las mayúsculas y minúsculas: https://jira.mongodb.org/browse/SERVER-90 y la tarea se ha retrasado.

Esto significa que la única forma de clasificar las mayúsculas y minúsculas actualmente es crear un campo específico de "cassette inferior", copiando el valor (cassette inferior por supuesto) del campo de ordenación en cuestión y clasificándolo en su lugar.