マキシムDikhtyar:
MongoDBは、データの次のセットが含まれています
[{"user": "a", "domain": "some.com"},
{"user": "b", "domain": "some.com"},
{"user": "b1", "domain": "some.com"},
{"user": "c", "domain": "test.com"},
{"user": "d", "domain": "work.com"},
{"user": "aaa", "domain": "work.com"},
{"user": "some user", "domain": "work.com"} ]
私は結果に、ドメインによってフィルタリング最初の項目、これ以上その2つの同じドメインを選択する必要があります。Mongoのクエリ結果の後ルックスが好きでなければなりません
[{"user": "a", "domain": "some.com"},
{"user": "b", "domain": "some.com"},
{"user": "c", "domain": "test.com"},
{"user": "d", "domain": "work.com"},
{"user": "aaa", "domain": "work.com"}]
同じドメインを持つ他の同じドメインとわずか2の結果は、スキップしなければなりません。これは$集約、$フィルターまたは何か他のものをどう行うことは可能ですか?
ドメインによってグループへの道であると(例2)ユーザーデータを単に最初のNを取得しますか?例:
[{"domain": "some.com", "users": [a, b]}]
そう
{"user": "b1", "domain": "some.com"} will be skip
Valijon:
あなたはMongoDBの集計を行った結果を希望れるかもしれません。
これは、4つの段階で構成されています:
1.当社グループdomain
フィールドとに蓄積しdata
、同じドメイン名を持つ文書
2よりも、私たちは、ドメインごとに設定さ最大2つの項目に配列をスプライス
我々は平ら3. data
持つフィールド$unwind
オペレーター
たちがして、元の文書構造を返す4. $replaceRoot
オペレーター
db.collection.aggregate([
{
"$group": {
"_id": "$domain",
"data": { "$push": "$$ROOT" }
}
},
{
"$addFields": {
"data": {
"$slice": [ "$data", 0, 2 ]
}
}
},
{
"$unwind": "$data"
},
{
$replaceRoot: { "newRoot": "$data" }
}
])