首页 > 解决方案 > MongoDB:是否可以以隔离的方式从文档中索引(唯一)子数组?

问题描述

我最近遇到一个问题,我想解决它。如果有人能提出任何建议,我将不胜感激。

我有代表“用户”的文档,每个文档都有一个负责保存一些代码的子数组,每个用户可以有很多。问题是,每个用户在其特定的数组中不能有重复的代码,但同时,在这种情况下,每个文档应该是隔离的,例如,可以有两个或多个相同的代码,但因为它们来自不同的文档(用户)。

简而言之,子数组(“代码”)不能有单独重复的代码(代码),但这不应该干扰其他文档

我可以在应用程序部分做到这一点,但我认为直接在 DB 上做这个保证会更安全。

是否可以为这种特定情况创建索引?

代表各自用户的两个文档示例:

{ // Document of user 1
    "_id" : "1", //user 1 and its codes
    "codes" : [
        {
            "code" : "1111",
            "description" : "code 1",
        },
        {
            "code" : "2222",
            "description" : "code 2",
        },
        {
            "code" : "3333",
            "description" : "code 3",
        }
    ]
},

{ // Document of user 2
    "_id" : "2", //user 2 and its codes
    "codes" : [
        {
            "code" : "1111",
            "description" : "code 1",
        },
        {
            "code" : "4444",
            "description" : "code 2",
        },
        {
            "code" : "2222",
            "description" : "code 3",
        }
    ]
}

谢谢!

标签: mongodb

解决方案


使用https://docs.mongodb.com/manual/reference/operator/update/addToSet/来维护代码子文档的唯一性。您需要确保始终以相同的顺序指定代码字段(例如代码、描述)。


推荐阅读