Lasst uns sagen, dass ich eine Datenbank Sammlung users
in mongodb genannt und die Dokumente wie folgt aussehen:ein Ergebnis der Unterlagen Get in Arrays in mongodb befindet
[{
_id: 'userId1'
actions: [{
name: 'SingUp',
data: '...',
time: '1'
}, {
name: 'CreatePost',
data: '...',
time: '4'
}]
}, {
_id: 'userId2'
actions: [{
name: 'SingUp',
data: '...',
time: '2'
}, {
name: 'CreatePost',
data: '...',
time: '3'
}, {
name: 'CreatePost',
data: '...',
time: '5'
}]
}]
Was wäre der effizienteste Weg sein, nur zu erhalten die Aktionsdokumente mit dem Namen CreatePost, alle nach Zeit sortiert? I.e. dies ist das Ergebnis I will:
[{
name: 'CreatePost',
data: '...',
time: '3'
}, {
name: 'CreatePost',
data: '...',
time: '4'
}, {
name: 'CreatePost',
data: '...',
time: '5'
}]
Es wäre Am effizientesten ist es, eine $ -Filteroperation in einer $ -Projektstufe als Aggregationsoperation zu verwenden. Sie können das innere Array jedoch nicht "sortieren", ohne zu einem "$ unwind" zu führen, wodurch die Effizienz erheblich sinkt. Wenn Sie natürlich akzeptieren können, dass das Array immer mit jeder Schreiboperation sortiert wird und nicht neu geordnet werden muss, wird der Ansatz "$ filter" praktikabel. Daher ist es am effizientesten, das Array in einem geordneten Zustand zu halten, anstatt zu versuchen, das zurückgegebene Ergebnis zu ändern. –
Ich kann davon ausgehen, dass jedes Array sortiert ist, aber es kann gemischte Sortierung zwischen Arrays wie im obigen Beispiel geben, wo das erste und letzte Element des Ergebnisses im zweiten Dokument ist und das mittlere Element des Ergebnisses im ersten Dokument ist. –