1

すべてのドキュメントに別の一致するドキュメントが必要なドキュメントのコレクションがあります。(これは仕様によるものではなく、現在の操作のみです。)ただし、コレクション内のドキュメント数の現在のカウントは奇数です。他の1つのドキュメントで共有されていないキーの値に対してクエリを実行する方法はありますか?

すなわち。このようなコレクションがある場合:

{_id:'dcab0001', foo: 1, bar: 'dfgdgd'}
{_id:'dcab0002', foo: 2, bar: 'tjhttj'}
{_id:'dcab0003', foo: 1, bar: 'ydgdge'}
{_id:'dcab0004', foo: 3, bar: 'jyutkf'}
{_id:'dcab0005', foo: 3, bar: 'pofsth'}

fooidのドキュメントを返すクエリを実行できますdcab0002

4

1 に答える 1

3

これは、MapReduceを使用するか、MongoDB2.2以降でAggregationFrameworkを使用して行うことができます。

集約フレームワークを使用した例を次に示します。

db.pairs.aggregate(

    // Group by values of 'foo' and count duplicates
    { $group: {
        _id: '$foo',
        key: { $push: '$_id' },
        dupes: { $sum: 1 }
    }},

    // Find the 'foo' values that are unpaired (odd number of dupes)
    { $match: {
        dupes: { $mod: [ 2, 1 ] }
    }}

    // Optionally, could add a $project to tidy up the output
)

サンプル出力:

{
    "result" : [
        {
            "_id" : 2,
            "key" : [
                "dcab0002"
            ],
            "dupes" : 1
        }
    ],
    "ok" : 1
}
于 2012-10-16T12:19:30.433 に答える