【问题标题】:MongoDB Unique index on multiple fieldMongoDB 多个字段的唯一索引
【发布时间】:2016-01-18 12:38:15
【问题描述】:

我正在使用 MongoDb 数据库,我需要使多个字段唯一。我需要的是 MongoDb 检查多个字段的 组合 是否唯一。让我们举一个我需要的例子:

如果我在添加索引后在数据库中按此顺序添加以下内容:
{"name":"paul", "age":"21"}
{"name":"goerge", "age":"21"}
{"name":"paul", "age":"44"}
{"name":"paul", "age":"21"}

在以下示例中,only 被接受的人将是最后一个。

我尝试了以下唯一的复合索引,但 它不起作用。在前面的示例中,它只会保留第一个,因为它会检查每个字段是否都是唯一的

db.test.createIndex({"name":1, "age":1}, {unique:true})

我也试过了,同样的问题:

db.test.createIndex({"name":1}, {unique:true})
db.test.createIndex({"age":1}, {unique:true})

我搜索了几个小时,但找不到任何可以让我这样做的东西。

有人知道方法吗?

【问题讨论】:

  • 听起来您已经有重复数据,而且各种索引尝试也无济于事。您应该在第一次尝试创建之前删除所有索引并首先删除所有重复项。见remove dups from mongodb
  • 编辑了帖子。在示例中,索引已经设置,我们添加这些新文档。
  • 无法复制。使用{"name":1, "age":1}, {unique:true} 定义的索引,则最后一个文档插入失败。如建议的那样,您的收藏可能已经包含重复数据,并给出了删除程序。如果只是一个测试,则删除该集合并重新开始。

标签: mongodb indexing field unique


【解决方案1】:

您无法创建唯一的索引,因为您的姓名和年龄不是唯一的!检查保罗 21 岁 如果你修复这个值。创建索引的最佳方法是这个

db.test.createIndex({"name":1, "age":1}, {unique:true})

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 2014-04-04
    • 2012-11-16
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多