如何在Mongo DB集合中的嵌入式阵列上添加唯一索引

时间:2016-12-01 14:43:05

标签: mongodb unique-key embedded-documents

我正在尝试在下面提到的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 } 
        } 
    }
);

即使已创建索引,我也可以添加具有现有文件名的记分卡。

请帮忙。

1 个答案:

答案 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 函数   在添加之前检查该值是否已存在。