2010-11-22 3 views
0

Ich habe Logbuch Dokumente mit einer Liste von Protokollen eingebettet:Mongo Sammlung doc Organisation und Abfrage

{ 
    type:'logbook', 
    name:'my book', 
    userRef:2, 
    cdate: ...., 
    logs: [ 
     { 
      color: 'red', 
      weight: 200, 
      cdate: ..., 
      foo: 'bar' 
     }, 
     { 
      color: 'blue', 
      weight: 100, 
      cdate: ..., 
      foo: 'bar' 
     }, 
     { 
      color: 'green', 
      weight: 240, 
      cdate: ..., 
      foo: 'bar' 
     } 
    ] 

Ich möchte paginierte bestellt Protokolleinträge für eine bestimmte Logbuch zeigen.

Ist es möglich, solche aus einer solchen Struktur mit Mongo zu extrahieren?

Wenn nicht, sollte ich stattdessen eine logEntries-Sammlung für Protokolle haben?

Dank

Antwort

1

Sie können, welche Teile eines Dokuments angeben Sie mithilfe field selection abrufen möchten. Zum Teil eines Arrays Feld auswählen, können Sie die $slice operator verwenden, zum Beispiel:

// select the name and a range of log entries from the document 
db.logbooks.find({ name: "my book" }, { name: 1, logs: { $slice: [10, 5] } }) 

Beachten Sie, dass jede Sortierung der Protokolleinträge neben Auftrag muss getan werden, Client-Seite.

+0

Hum ok, wenn ich es bestellen möchte, vielleicht sollte ich logbook.logs sortieren, bevor ich jedes Mal schreibe, wenn ich ein Logbuch-Dokument aktualisiere/speichere. – coulix

+0

@coulix: Wenn Sie einem Logbuch mit dem ['$ push'-Operator] (http://www.mongodb.org/display/DOCS/Updating#Updating-%24push) neue Protokolleinträge hinzufügen, werden die Protokolleinträge angezeigt geordnet nach Einfügezeit. Wenn Sie andere Sortiermethoden benötigen, speichern Sie die Protokolleinträge neben der Datumssortierung besser in einer separaten Sammlung. –