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.
Esto ha sido un https://jira.mongodb.org/browse/SERVER-90 durante bastante tiempo en MongoDB JIRA, pero ahora está resuelto. Eche un vistazo a estas notas de la versión para obtener documentación detallada . Deberías usar la collation
.
User.find()
.collation({locale: "en" }) //or whatever collation you want
.sort({name:''asc''})
.exec(function(err, users) {
// use your case insensitive sorted results
});
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.