我正在使用MongoDB作爲我的數據庫。每個文檔中都有52個字段/ BsonElement/FieldNames。在我的收藏中,包含數百萬份文件。排除字段如果它有重複
我的應用程序,使用.NET,有一個組合框/下拉控件,讓用戶選擇一個唯一的主鍵/字段。我想知道如何檢查一個字段是否有任何重複的值。如果有的話,我不會在我的組合框控件中包含這個。
我正在使用MongoDB作爲我的數據庫。每個文檔中都有52個字段/ BsonElement/FieldNames。在我的收藏中,包含數百萬份文件。排除字段如果它有重複
我的應用程序,使用.NET,有一個組合框/下拉控件,讓用戶選擇一個唯一的主鍵/字段。我想知道如何檢查一個字段是否有任何重複的值。如果有的話,我不會在我的組合框控件中包含這個。
我們可以在聚合管道中使用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
}
感謝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"}}}}}}}
)`
發表您的收藏樣本文件。 –
[Image Reference](https://ibb.co/hiYpvb) – Hobert
我已經添加了如何查詢它的答案,但在.NET中建立查詢我需要看看你如何使用驅動程序。 –