Mongodb 排除字段(如果有重复项)
我使用MongoDB作为我的数据库。我在每个文档中有52个字段/b单一元素/fieldname。在我的收藏中,包含数以百万计的文档 我的应用程序使用.NET,有一个组合框/下拉控件,允许用户选择唯一的主键/字段。我想知道如何检查字段是否有重复值。如果有,我不会将其包含在我的组合框控件中。尝试此操作将帮助我们仅选择唯一值 例如,如果有国家/地区下拉列表(组合框),则检索国家/地区唯一值的查询为Mongodb 排除字段(如果有重复项),mongodb,Mongodb,我使用MongoDB作为我的数据库。我在每个文档中有52个字段/b单一元素/fieldname。在我的收藏中,包含数以百万计的文档 我的应用程序使用.NET,有一个组合框/下拉控件,允许用户选择唯一的主键/字段。我想知道如何检查字段是否有重复值。如果有,我不会将其包含在我的组合框控件中。尝试此操作将帮助我们仅选择唯一值 例如,如果有国家/地区下拉列表(组合框),则检索国家/地区唯一值的查询为 db.collection.distinct("Country") 我们可以在聚合管道中使用group
db.collection.distinct("Country")
我们可以在聚合管道中使用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
}
多亏凯文·史密斯的回答,我才得以完成。干杯~
.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"}}}}}}}
)`
发布您的集合示例文档。我已经添加了如何查询它的答案,但是在.NET中构建查询时,我需要了解您如何使用驱动程序。我不是在尝试获取字段的唯一值。我试图放在列表中的是字段,其中每个字段的所有值都是唯一的。我想我要先运行distinct,然后如果它等于collection.count,那么所有值都是唯一的?这将得到某个字段的唯一值,对吗?我想是的,所以。。我想检查的是,一个字段是否为重复值。如果字段的所有值/数据都是唯一的,那么我会将此字段作为主键包含在组合框中。稍微修改一下,以计算结果:)让我在.NET上试试,Kevin。这可能需要一段时间。我不太熟悉MongoDB方法。感谢您的帮助。为了验证
firstName
的结果是否正确,这意味着firstName
的所有值都是唯一的,对吗?否则,firstName
有一个重复的值?是的,如果该字段为true
,则所有值都是唯一的。我们应该把它们改名为更合理的名称