mongodb - 允许文档中的嵌套数组与集合中的其他文档共享相同的对象
问题描述
我有一个如下所示的选项列表架构:
const PicklistSchema = mongoose.Schema({
list_name: {
type: String,
required: true,
},
author_id: {
type: String,
required: true,
},
author_name: {
type: String,
required: true,
},
items: {
type: Array,
required: true,
default: [],
},
status: {
type: String,
enum: [
'initialized',
'submitted',
'retrieving',
'retrieved',
'complete',
],
required: true,
default: 'initialized',
},
date: {
type: Date,
required: true,
default: Date.now(),
},
});
插入“items”数组的对象如下所示:
{
"name": "testitem1",
"size": "00",
"desc": "This item should only be used in a dev environment, for testing purposes",
"upcs": [ "testitem1", "test" ],
"id": "test"
}
我创建了一个新的选项列表并添加了测试项目,它可以工作。如果我创建第二个选项列表并尝试添加相同的测试项目,我会得到:
E11000 duplicate key error collection: picklists.picklists index: items.id_1 dup key: { items.id: "test" }
{ items.id: null }
如果我尝试创建一个新的选择列表而不向第一个添加任何内容,则会出现错误。
我尝试添加unique: false
到 items 数组和其他几个选项(例如编写 items 数组的子模式和 make id: { type: String, unique: false }
),但没有什么能阻止该错误。我正在阅读稀疏索引,但我不确定这是否是解决方案,如果是,如何将其合并到代码中。
如何让 mongo 对每个选项列表文档的 items 数组中的内容不那么固执己见?
我可以删除集合中的每个选项列表,如果我创建的第二个(或第三个等)选项列表尝试添加第一个选项列表中包含的项目,则会发生错误。
解决方案
看起来很多类似的错误是由模式先前对数据强加的集合中的伪影引起的,并且通过删除集合并创建一个新集合来解决,所以我尝试了它,它起作用了。
推荐阅读
- postgresql - 如何将触发器与 3 个不同的表一起使用
- vbscript - 从 Outlook 保存具有特定主题的电子邮件的附件
- sparql - 如何检查三元组是否存在?
- python - 即使我将 pytest.py 移动到 /bin,也找不到命令“pytest”
- yii - yii2 使用会话从 yii 获取用户身份验证
- excel - excel显示链接单元格的单元格地址NOT值
- javascript - 为复杂的验证编写正则表达式
- java - Java中的金字塔模式,星号后跟下划线
- cumulocity - 如何使用 c8y 中的事件处理脚本在数据资源管理器图形模式表中显示自定义信息
- git - 如何将 git 分支获取到先前的提交并将其作为新的 HEAD 推送?