mongodb - 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",
}
]
}
谢谢!
解决方案
使用https://docs.mongodb.com/manual/reference/operator/update/addToSet/来维护代码子文档的唯一性。您需要确保始终以相同的顺序指定代码字段(例如代码、描述)。
推荐阅读
- javascript - 监听元素及其子/后代的“滚动”事件
- javascript - 如何在 React 中修改对象的子集?
- pandas - ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0. 当从不和谐消息中获取预测数据时
- c# - ASP.NET Core 标识导航栏布局未正确呈现
- json - 无法通过 Webhook 将包含换行符的推文文本发送到 Discord
- javascript - 如何解决:SyntaxError: await 仅在异步函数中有效
- gradle - Gradle:我们可以从命令行参数覆盖 settings.gradle 中的 include 语句吗?
- javascript - TypeError:无法读取未定义的属性“defaultMeta”
- java - Elasticsearch 反向搜索查询
- java - 使用 NavigationComponent 在另一个 DialogFragment 的 navBackStackEntry 观察者结果中显示 DialogFragment