Rav*_*ond 5 unique-key mongodb embedded-documents
我正在尝试在下面提到的 mongo 集合中的 ScorecardList.filename 字段上创建唯一索引。目的是我们不应该能够在 ScorecardList 中创建具有相同文件名的另一个元素。
蒙戈架构:
{
"Name": "Ravikant Khond",
"PIN" : "411057",
"scorecardList": [
{
"fileName" : "ScoreCard_April_2016.pdf",
"runDate" : ISODate("2016-05-01T00:00:00.000Z"),
"month" : "April",
"year" : "2016"
},
{
"fileName" : "ScoreCard_May_2016.pdf",
"runDate" : ISODate("2016-06-01T00:00:00.000Z"),
"month" : "May",
"year" : "2016"
}
]
}
Run Code Online (Sandbox Code Playgroud)
[1]
我在创建唯一索引时尝试使用的 Mongo 命令如下:
db.testing.createIndex(
{ "scorecardList.filename": 1 },
{
unique: true,
partialFilterExpression: {
"scorecardList.filename": { $exists: true }
}
}
);
Run Code Online (Sandbox Code Playgroud)
即使索引已创建,我也可以添加具有现有文件名的记分卡。
请帮忙。
当涉及到数组时,你不能强制执行完全的唯一性
据我所知,唯一索引仅强制不同文档之间的唯一性,因此这会引发重复键错误:
db.food.insert( { id: 123, name:bread, ingredients: [ { id: 456 } ] } )
db.food.insert( { id: 123, name:bread, ingredients: [ { id: 456 } ] } )
Run Code Online (Sandbox Code Playgroud)
但这是允许的:
db.food.insert( { id: 123, name:bread, ingredients: [ { id: 456 }, { id: 456 } ] } )
Run Code Online (Sandbox Code Playgroud)
我不确定是否有任何方法可以在 Mongo 级别强制执行您需要的约束,也许您可以在插入更新时在应用程序逻辑中检查它?
或者,使用$addToSet函数将在添加之前检查该值是否已存在。
| 归档时间: |
|
| 查看次数: |
1422 次 |
| 最近记录: |