排除字段如果它有重复
问题描述:
我正在使用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中建立查询我需要看看你如何使用驱动程序。 –