1

私はコレクションを持っていて、サンプルデータはこのようなものです.

{ L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" " } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K: "asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" } { L:"画像", K:"asdd" }

その他のフィールドは、{L:"cars",K:"asdff"},{L:"table",K:"asgeg"} これらのフィールドには少なくとも 20 個のドキュメントがあり、結果として欲しいのはこのようなものです

{ L:"画像", K:"asdd" } { L:"画像", K:"asdd" }

{ L:"車", K:"asdd" } { L:"車", K:"asdd" }

{ L:"テーブル", K:"asdd" } { L:"テーブル", K:"asdd" }

Lフィールドに従ってドキュメントを取得したいのですが、すべてのフィールドの結果を2つに制限したいのですが、これを管理する方法がわかりません。返信ありがとうございます:)

4

1 に答える 1

1

あなたのスキーマを考えると、私は、単一のクエリで、あなたが望むことをする方法はないと思います。これをPHPとしてタグ付けしたので、必要な値を抽出するために、単純なforeachループなどを備えたPHPスクリプトをお勧めします。

もちろん、L値ごとに1つずつ、制限2の3つの個別のクエリでそれを行うことができます。リストされている3つだけでなく、実際には多くの異なる値について話していると思います。

私はPHPの専門家ではないので、お手伝いすることはできませんが、シェルのJavaScript機能を次のように使用できます(サンプルデータをfooというコレクションにロードし、_idフィールドが自動的に追加されました)::

db.foo.distinct("L").forEach(function(key) {
    db.foo.find({"L" : key}, {_id : 0}).limit(2).forEach(
        function (value) {
            printjson(value);
        }
    )
})

私はdistinctを使用して3つの値を生成しましたが、次のように最初の行に配列として簡単に渡すことができます。

['images', 'cars', 'table'].forEach(function(key) {

いずれにせよ、関数は私に次の出力を与えました:

{ "L" : "images", "K" : "asdd" }
{ "L" : "images", "K" : "asdd" }
{ "L" : "cars", "K" : "asdd" }
{ "L" : "cars", "K" : "asdd" }
{ "L" : "table", "K" : "asdd" }
{ "L" : "table", "K" : "asdd" }
于 2012-11-19T04:11:05.637 に答える