2010-11-22 18 views
0

私が埋め込まれたログのリストとログブック文書を持っている:Mongoのコレクションドキュメント組織とクエリ

{ 
    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' 
     } 
    ] 

私は与えられたログブックのためのページ分割命じたログエントリを表示したいと思います。

このような構造からマンゴーを抽出することは可能ですか?

代わりにログ用のlogEntriesコレクションが必要な場合はどうすればいいですか?

おかげ

答えて

1

あなたはfield selectionを使用して取得したい文書の一部を指定することができます。挿入順序以外のログエントリのいずれかのソートは、クライアント側で行わなければならないこと

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

注:配列フィールドの一部を選択するには、$slice operator、例えばを使用することができます。

+0

もし私がそれを整理しておきたいのであれば、私はログブックを更新/保存する度に書く前にlogbook.logsを並べ替えるべきです。 – coulix

+0

@coulix:ログブックに['$ push'演算子](http://www.mongodb.org/display/DOCS/Updating#Updating-%24push)を追加すると、ログエントリは次のようになります。挿入時間順。他のソート方法が必要な場合は、日付ソートのほかに、別のコレクションにログエントリを格納する方がよいでしょう。 –