我正在尝试在下面提到的mongo集合中的scorecardList.filename字段上创建唯一索引。目的是我们不能在scorecardList中创建具有相同文件名的另一个元素。
Mongo Schema:
{
"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"
}
]
}
[1]
Mongo命令我试图在创建唯一索引时使用如下:
db.testing.createIndex(
{ "scorecardList.filename": 1 },
{
unique: true,
partialFilterExpression: {
"scorecardList.filename": { $exists: true }
}
}
);
即使已创建索引,我也可以添加具有现有文件名的记分卡。
请帮忙。
答案 0 :(得分:-1)
对于数组
,您无法强制实现完全唯一性据我所知,唯一索引仅强制执行不同文档的唯一性,因此会产生重复的键错误:
db.food.insert( { id: 123, name:bread, ingredients: [ { id: 456 } ] } )
db.food.insert( { id: 123, name:bread, ingredients: [ { id: 456 } ] } )
但这是允许的:
db.food.insert( { id: 123, name:bread, ingredients: [ { id: 456 }, { id: 456 } ] } )
我不确定是否有任何方式强制执行Mongo级别所需的约束,也许这是您在插入更新时可以在应用程序逻辑中检查的内容?
或者,使用 $ addToSet 函数 在添加之前检查该值是否已存在。