2017-10-10 101 views
1

我正在使用MongoDB作爲我的數據庫。每個文檔中都有52個字段/ BsonElement/FieldNames。在我的收藏中,包含數百萬份文件。排除字段如果它有重複

我的應用程序,使用.NET,有一個組合框/下拉控件,讓用戶選擇一個唯一的主鍵/字段。我想知道如何檢查一個字段是否有任何重複的值。如果有的話,我不會在我的組合框控件中包含這個。

+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,凱文。它可能需要一段時間。我不熟悉MongoDB方法。感謝幫助。 – Hobert

0

嘗試distinct這將有助於我們在挑選只有唯一值

例如,如果有一個國家降下來(組合框),那麼查詢檢索國家的唯一值是

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

我不想獲得一個字段的唯一值。我試圖把我的名單放在字段中 - 每個字段的所有值都是唯一的。 – Hobert

+0

我想我會首先運行不同的,那麼如果它等於collection.count,那麼所有的值都是唯一的? – Hobert

0

感謝Kevin Smith的回答,我能夠完成它。乾杯〜

.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"}}}}}}} 
)`