2013-03-18 13 views
9

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?

+6

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

+0

@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. –

+0

I seconda risposta di WiredPrairie: memorizza la lunghezza della stringa come un campo separato nel documento e ordinala. – shelman

risposta

-1

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

+4

La dimensione $ è per gli array, non per le stringhe , quindi non funzionerà. – Wrench

+0

non rilevata eccezione: aggregato non riuscita: { \t "errmsg": "eccezione: L'argomento a $ dimensione deve essere un array, ma era di tipo: String", "codice" \t: 17124, \t "ok": 0 } – David

0

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.

2

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}}, 
    ] 
) 
Problemi correlati