【问题标题】:Creating unique index in mongo DB with certain condition在特定条件下在 mongoDB 中创建唯一索引
【发布时间】:2018-07-17 13:06:08
【问题描述】:

我是 mongodb 的新手。在研究“在 mongodb 中施加唯一约束”主题时,我遇到了 createindex 的概念,其中唯一字段设置为 true。这确保了在其上创建索引的某个字段在整个数据库中变得唯一。

我有一个 Student 集合,其中包含三个字段:student_id、name、age。我希望 student_id 在我的数据库中是唯一的。现在,对于字段 'name' = "XYZ" 的值,我可以允许许多学生 ID 不需要唯一的记录。对于“name”的所有其他值,student_id 必须是唯一的。

例如:如果初始学生集合的内容是:

[
  { "student_id": 1 
    "name": "A",
    "age": 1.0
  },
  { 
    "student_id": 2 
    "name": "B",
    "age": 2.0
  }
]

现在,如果我想插入记录

{ 
  "student_id": 2 
  "name": "C",
  "age": 105.0
}

它应该告诉我student_id: 2 已经存在(或重复条目)。 但是如果我想插入记录:

{ 
  "student_id": 2 
  "name": "XYZ",
  "age": 105.0
}

它应该允许我插入,因为我想插入任何记录,如果 name: "XYZ" 用于学生 ID 的任何值。 对于所有其他名称值,我希望 student_id 字段是唯一的。

任何建议都将受到高度评价。谢谢 。

【问题讨论】:

  • 啊,事实证明,你不能在部分索引表达式中使用否定表达式(“not XYZ”)。可惜。否则,它会对您有所帮助。
  • 没错。无论如何谢谢。

标签: mongodb mongodb-query


【解决方案1】:

您可以在两个键上创建唯一索引,在您的情况下,在 name 和 student_id 上创建唯一索引。这将解决您的情况。 查看链接获取更多帮助:https://docs.mongodb.com/manual/core/index-unique/

【讨论】:

  • 不,我猜。我不想对“名称”字段施加限制。可以有多个可以具有相同名称的记录。我真正想要的是:对于给定的 name 值,可能有多个 student_id 。继续我之前的示例,名称 'XYZ' 可能有许多 student_id。但单个 student_id 不应映射到除“XYZ”之外的多个名称。也就是说,对于student_id:1,不能有两条不同名字的记录为:name:'ABC',另一条记录有student_id:1,名字为'DEF'。
  • 根据我的理解可能是一个技巧,你可以使用 mongoDB 的 _id 作为学生 ID。因此,这将永远不会重复,也不会保持为空。希望这会有所帮助。
  • 不,这与我的要求相矛盾。如果我将 mongoDB 的 _id 设置为 student_id 并对它们进行一对一的映射,我将无法在 student_id=2 和 name = 'XYZ' 的位置插入第二条记录。要求 name ='XYZ' 时有重复的 student_id。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 2014-07-01
  • 1970-01-01
  • 2022-11-29
  • 2017-02-24
  • 1970-01-01
相关资源
最近更新 更多