2017-10-10 8 views
1

私はデータベースとしてMongoDBを使用しています。私は各フィールドに52 Fields/BsonElement/FieldNamesを持っています。私のコレクションには、何百万ものドキュメントが含まれています。重複しているフィールドを除外

.NETを使用しているMy Appには、ユーザーが一意の主キー/フィールドを選択できるようにするコンボボックス/ドロップダウンコントロールがあります。フィールドに重複する値があるかどうかを調べる方法を知りたい。もしあれば、私はこれを私のコンボボックスコントロールに含めません。

+0

ポストあなたのコレクションのサンプル文書。 –

+0

[Image Reference](https://ibb.co/hiYpvb) – Hobert

+0

質問の回答方法を追加しましたが、.NETでクエリを作成しました。どのようにドライバを使用するかを確認する必要があります。 –

答えて

2

一意のフィールドをすべて集計して集計パイプライン内でgroupbyを使用し、それを合計文書と比較することができます。

は、我々は次のようなデータを持っていると言う:

[ 
    { 
    "_id":ObjectId("59dc805cf51b821565695ec8"), 
    "isDeleted": false, 
    "salutation": "Mr.", 
    "firstName": "Kevin", 
    "lastName" : "Smith" 
    },{ 
    "_id":ObjectId("59dc80d5f51b821565695ec9"), 
    "isDeleted": true, 
    "salutation": "Miss", 
    "firstName": "Helen", 
    "lastName" : "Smith" 
    },{ 
    "_id":ObjectId("59dc80dff51b821565695eca"), 
    "isDeleted": false, 
    "salutation": "Mr.", 
    "firstName": "Joe", 
    "lastName" : "Bloggs" 
    } 
] 

私たちは、その後、次のクエリを実行できます。各フィールドのすべての可能な値を私たちに文書を返します

db.test.aggregate([ 
    { 
    $group: { 
     _id : null, 
     total: {$sum: 1}, 
     isDeleted: {$addToSet: "$isDeleted"}, 
     salutation: {$addToSet: "$salutation"}, 
     firstName: {$addToSet: "$firstName"}, 
     lastName: {$addToSet : "$lastName"}, 
    }, 
    },{ 
    $project: { 
     isDeleted: { $eq: [ "$total", {$size: "$isDeleted"} ]}, 
     salutation: { $eq: [ "$total", {$size: "$salutation"} ]}, 
     firstName: { $eq: [ "$total", {$size: "$firstName"} ]}, 
     lastName: { $eq: [ "$total", {$size: "$lastName"} ]} 
    } 
    } 
]); 

{ 
     "_id" : null, 
     "isDeleted" : false, 
     "salutation" : false, 
     "firstName" : true, 
     "lastName" : false 
} 
+0

これは特定のフィールドの一意の値を取得します。私はそうだと思う。 私がチェックしたいのは、フィールドが重複値であるかどうかを知ることです。フィールドのすべての値/データが一意の場合は、このフィールドをコンボボックスの主キーとして含めます。 – Hobert

+0

ちょうど結果を数えるためにビットを変更しました:) –

+0

.NET、Kevinでこれを試してみましょう。それはしばらく時間がかかるかもしれません。私はMongoDBメソッドに精通していません。ヘルプをよろしくお願いいたします。 – Hobert

0

これは一例に過ぎないが、一意の値

を選んで私たちを助けるdistinctを試してみてください国ドロップ(コンボボックス)がダウンした場合、その後、国の固有の値を取得するためのクエリが

db.collection.distinct("Country") 
です
+0

フィールドの一意の値を取得しようとしていません。私がリストに載せようとしているのは、各フィールドのすべての値が一意であるフィールドです。 – Hobert

+0

私はそれがcollection.countと等しいなら、次にすべての値が一意であるならば、別のものを最初に実行するつもりだと思いますか? – Hobert

0

彼の答えのためにケヴィン・スミスのおかげで、私はそれを終えることができました。乾杯〜

.NET同等:!

`Dim Aggregate = Collection.Aggregate. 
    Group(New BsonDocument From { 
     {"_id", BsonNull.Value}, 
     {"total", New BsonDocument From { 
      {"$sum", 1}}}, 
     {"isDeleted", New BsonDocument From { 
      {"$addToSet", "$isDeleted"}}}} 
). 
Project(
    New BsonDocument From { 
     {"isDeleted", New BsonDocument From { 
      {"$eq", New BsonArray From { 
       "$total", New BsonDocument From { 
        {"$size", "$isDeleted"}}}}}}} 
)` 
関連する問題