posso farlo facilmente su mysqlCome ordinare i risultati per la lunghezza della stringa su MongoDB
select * from TABLE order by length(FIELD) asc
Come posso farlo su MongoDB?
posso farlo facilmente su mysqlCome ordinare i risultati per la lunghezza della stringa su MongoDB
select * from TABLE order by length(FIELD) asc
Come posso farlo su MongoDB?
supporre lo schema è qualcosa di simile:
example = {_id: "XXX", text: "YYY"}
db.example.aggregate([
{$project : {text : 1, length : {$size : "$text"}}},
{$sort : {length : 1}}
]);
Penso che questo farà il lavoro, ma solo per mongo 2.6 e superiori
per ordinare i documenti in MongoDB, è necessario utilizzare sort() metodo. Il metodo accetta un documento contenente un elenco di campi insieme al loro ordine di ordinamento. Per specificare l'ordinamento 1 e -1 vengono utilizzati. 1 è usato per ordine ascendente mentre -1 è usato per ordine decrescente.
Sintassi
La sintassi di base del metodo sort() è il seguente -
db.COLLECTION_NAME.find().sort({KEY:1})
Esempio
consideri il myycol collezione ha i seguenti dati.
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Untitled"}
L'esempio seguente mostra i documenti ordinati per titolo in ordine decrescente.
db.mycol.find({},{"title":1,_id:0}).sort({"title":-1})
{"title":"Untitled"}
{"title":"NoSQL"}
{"title":"MongoDB"}
Si prega di notare, se non si specifica la preferenza di ordinamento, allora il metodo sort() mostrerà i documenti in ordine crescente.
MongoDB 3.4 introduce l'operatore di aggregazione $strLenCP
che finalmente supporta questo. Un esempio:
db.collection.aggregate(
[
{$project: {
"field": 1,
"field_length": { $strLenCP: "$field" }
}},
{$sort: {"field_length": -1}},
{$project: {"field_length": 0}},
]
)
http://stackoverflow.com/questions/14647644/select-string-length-in-mongodb se si vuole che sia efficace, mi piacerebbe memorizzare la lunghezza della stringa e ordinare con quella. – WiredPrairie
@MagnusTengdahl, ho provato a fare mapreduce per produrre un'altra collezione con una nuova colonna per memorizzare la lunghezza della stringa e poi ordinare per quel campo. Ma la mappa si riduce non è veloce e richiede circa 1000ms per 20.000 righe e ho bisogno di creare una nuova collezione ogni volta che faccio l'ordinamento. –
I seconda risposta di WiredPrairie: memorizza la lunghezza della stringa come un campo separato nel documento e ordinala. – shelman