ユニークフィールドの数で結果をフィルタリングするためにどのようにMongoDBは、PyMongo?

マキシム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" }
  }
])

MongoPlayground | Pymongo集約

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=399239&siteId=1