Mongodb 排除字段(如果有重复项)

Mongodb 排除字段(如果有重复项),mongodb,Mongodb,我使用MongoDB作为我的数据库。我在每个文档中有52个字段/b单一元素/fieldname。在我的收藏中,包含数以百万计的文档 我的应用程序使用.NET,有一个组合框/下拉控件,允许用户选择唯一的主键/字段。我想知道如何检查字段是否有重复值。如果有,我不会将其包含在我的组合框控件中。尝试此操作将帮助我们仅选择唯一值 例如,如果有国家/地区下拉列表(组合框),则检索国家/地区唯一值的查询为 db.collection.distinct("Country") 我们可以在聚合管道中使用group

我使用MongoDB作为我的数据库。我在每个文档中有52个字段/b单一元素/fieldname。在我的收藏中,包含数以百万计的文档

我的应用程序使用.NET,有一个组合框/下拉控件,允许用户选择唯一的主键/字段。我想知道如何检查字段是否有重复值。如果有,我不会将其包含在我的组合框控件中。

尝试此操作将帮助我们仅选择唯一值

例如,如果有国家/地区下拉列表(组合框),则检索国家/地区唯一值的查询为

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
,则所有值都是唯一的。我们应该把它们改名为更合理的名称