gpt4 book ai didi

mongodb - 如何在 Mongodb 集合中的嵌入数组上添加唯一索引

转载 作者:行者123 更新时间:2023-12-03 15:59:58 26 4
gpt4 key购买 nike

我正在尝试在下面提到的 mongo 集合中的 ScorecardList.filename 字段上创建唯一索引。目的是我们不应该能够在 ScorecardList 中创建具有相同文件名的另一个元素。

Mongo 架构:

{
"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 }
}
}
);

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

请帮忙。

最佳答案

当涉及到数组时,你无法强制执行完全唯一性

据我所知,唯一索引仅强制不同文档之间的唯一性,因此这会引发重复键错误:

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 级别强制执行您所需的约束,也许您可​​以在插入更新时在应用程序逻辑中检查它?

alternatively, using the $addToSet function would check if the value already exists before adding it.

关于mongodb - 如何在 Mongodb 集合中的嵌入数组上添加唯一索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40913463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com