2011-08-12 5 views
5

を取得するには、次のようになります。CouchDBの、このMySQLを使用して、最後の10枚の文書

SELECT * FROM thetable ORDER BY id DESC LIMIT 10 

私は「タイプ」を持つすべての文書のためのCouchDBでこれをどのように操作を行うことができます。「メッセージ」? (タイプですべての文書を引っ張っなし:メッセージ)

おかげ

答えて

9

は、すべてのドキュメントIDを放出するビューを作成します。ビューキーは自動的にソートに使用されます。

function(doc) { 
    if(doc.type && doc.type === 'message'){ 
     emit(doc._id, null); 
    } 
} 

次にクエリを実行:あなたは完全な文書をしたいのでhttp://host/yourdb/_design/yourdesigndoc/_view/viewname?limit=10&include_docs=true&descending=true

、我々は、ビューの値としては何も含まれていませんでした。代わりに、include_docs=trueを追加して、すべてのドキュメントをビューエントリとして取得します。

同じことを組み込みビューも存在することに注意してください:http://host/yourdb/_all_docs?limit=10&include_docs=true&descending=true

PS:あなたは、デフォルトではCouchDBのソート多かれ少なかれ役に立たないレンダリングされますのIDとしてUUIDを使用するという事実を認識しておく必要がありが、あなたが本当に最新のドキュメントを入手したいのであれば。独自のインクリメンタルID(配布/レプリケーションについてはどうすればよいですか)を指定するか、ドキュメントが作成された時刻を保存してビューで使用する新しいフィールドを使用してください。


あなたのドキュメントはcreatedフィールド(すなわち、UNIXタイムスタンプは、JavaScript Date.now()あるいはRFC 3339のような文字列)を持っている場合は、これらの値にインデックスを構築することができます。我々はdoc._id自体を放出しないこと

function(doc) { 
    if(doc.type && doc.type === 'message' && doc.created){ 
     emit(doc.created, null); 
    } 
} 

注:ここでは

は、時間ベースの図です。しかし、CouchDBは放出されたキーと値のペアごとに自動的にデータが入ったdoc._idを保存していますので、もう一度include_docs=trueを使用して完全なドキュメントを取得できます。

クエリhttp://host/yourdb/_design/yourdesigndoc/_view/viewname?limit=10&include_docs=true&descending=true

+0

ありがとうございます。ただし、これを行うと、メッセージを含む10の最も古い文書が返されます。私は最新の10の文書が必要です。私がこれを行うと考えることができる唯一の方法は、すべてのドキュメントIDを取得し、最後の10個のIDをその結果セットから取り出し、IDを使用してドキュメントを直接呼び出します。正しい方法それ。 – Brian

+0

私のPSは読んでいますか?あなたのdoc._idsがどのように生成/割り当てられるかによって異なります。おそらく、 'descending = false'に切り替えるか、あるいはあなたの文書に生成されたフィールドを追加してそれを使用する必要があります。 –

+0

うわー、それはない、私は100回ハハを試したに違いないと誓って...私はそれを台無しにどこにもないアイデア。ありがとう! – Brian

3

ドキュメントのIDがすでに増分されている場合は、代わりのCouchDBのデフォルトのUUIDを、あなたも、例えば、あなただけのデフォルト_all_docsビューを使用することができ、ビューを定義する必要はありません

http://couchdb_host/your_db/_all_docs?limit=10&descending=true&include_docs=true 
関連する問題