2012-10-02 5 views
6

ich diese Mongo Abfrage bin ausführen:MongoDB: Wie ein bestellen „wählen in“ in derselben Reihenfolge wie Elemente des Arrays

db.mytable.find({id:{$in:["1","2", "3", "4" ]}}); 

Es gibt alle Ergebnisse in einer fremden Ordnung, wie es folgt:

4,3,2,1 

Ich muss alle Ergebnisse in der gleichen Reihenfolge abrufen, wie es im Abfragearray definiert wurde.

1,2,3,4 

Ist es möglich?

+0

es ist nicht möglich –

+1

Diese Programmierung ist, alle Dinge möglich sind, die im Zusammenhang nur Code sind. Sie brauchen nur Zeit. – jcolebrand

+0

Es ist nicht möglich, dass mongoDB die Ergebnisse in der angegebenen Reihenfolge zurückgibt. :) –

Antwort

1

Ein paar Dinge zu beachten:

1.) MongoDB, wie die meisten Datenbanken, übernimmt keine Garantie über die Reihenfolge der Ergebnisse aus der Abfrage zurückgegeben, wenn Sie einen Anruf zu sort() verwenden. Wenn Sie wirklich garantieren möchten, dass das Abfrageergebnis in einer bestimmten Reihenfolge zurückgegeben wird, müssen Sie diese bestimmte Sortierreihenfolge angeben.

2.) Im Allgemeinen wird das zuletzt aktualisierte/verschobene Dokument am Ende des Ergebnissatzes angezeigt, es gibt jedoch keine Garantien. MongoDB verwendet "natürliche Reihenfolge" für seine native Anordnung von Objekten und obwohl dies sehr nahe an der Reihenfolge der Einfügung ist, ist es nicht garantiert, dass sie gleich sind.

3.) Indizierte Felder verhalten sich anders. Es lohnt sich, darauf hinzuweisen, dass es so aussieht, als ob Ihre Abfrage id und nicht _id verwendet. Die frühere Version _id wird standardmäßig indexiert, und id wird nicht indexiert, es sei denn, Sie haben diesem Feld explizit einen Index hinzugefügt.

Sie können mehr über MongoDB die Sortierung zu lesen und Bestellung hier: http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order

1

Sie können eine Abfrage wie folgt schreiben:

db.mytable.find({id:{$in:["1","2", "3", "4" ]}}).sort({id:1}) 

Ihre Ergebnisse haben ORDER BY id ASC

Quelle: MongoDB Advanced Queries

Aber wenn Sie wollen einfach nur die Ergebnisse der Reihenfolge auf der Grundlage Ihrer $ in Array , versuchen Sie, Ihr $ in-Array in umgekehrter Reihenfolge zu sortieren, wird das Ergebnis bezüglich des ersten Elements Ihres $ in-Arrays wahrscheinlich als letztes Element der Ergebnisse angezeigt

+0

Meine Array-Liste hat keine definierte Reihenfolge, die Werte könnten auch alphanumerisch sein ... dann, ich fürchte, es wird nicht möglich sein :( – larrytron

+0

@larrytron Wenn es keine definierte Reihenfolge hat, einfach umgekehrt Es ist Ordnung, Sie müssen nicht wissen, wie die Reihenfolge ist, zB können Sie [array_reverse] (http://php.net/manual/en/function.array-reverse.php) in PHP verwenden – YAAK

+0

Entschuldigung, ich versteh dich nicht, stell dir dieses Beispiel vor: 'db.mytable.find ({id: {$ in: [" foo "," bar "," baz "," qux "]}}); müssen genau diese Werte und die gleiche Reihenfolge wie hier abrufen (foo, bar, baz, qux), aber ich bekomme etwas wie "qux, bar, foo, baz" ... ich meine, ganz anders ... hoffe es hilft zu klären. Danke – larrytron

Verwandte Themen