本文介绍了子文件上的Mongoose唯一索引的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有一个简单的架构:
Let's say I have a simple schema:
var testSchema = new mongoose.Schema({
map: { type: [ mongoose.Schema.Types.Mixed ], default: [] },
...possibly something else
});
现在让我们确保对( _id
, map._id
)是唯一的。
Now let's ensure that pairs (_id
, map._id
) are unique.
testSchema.index({ _id: 1, 'map._id': 1 }, { unique: true });
使用快速检查db.test.getIndexes()
显示它已创建。
{
"v" : 1,
"unique" : true,
"key" : {
"_id" : 1,
"map._id" : 1
},
"name" : "_id_1_map._id_1",
"ns" : "test.test",
"background" : true,
"safe" : null
}
问题是,这个索引被忽略了,我可以轻松地用相同的 map._id $创建多个子文档C $ C>。我可以轻松地多次执行以下查询:
The problem is, this index is ignored and I can easily create multiple subdocuments with the same map._id
. I can easily execute following query multiple times:
db.maps.update({ _id: ObjectId("some valid id") }, { $push: { map: { '_id': 'asd' } } });
并最终获得以下结果:
{
"_id": ObjectId("some valid id"),
"map": [
{
"_id": "asd"
},
{
"_id": "asd"
},
{
"_id": "asd"
}
]
}
这里发生了什么?为什么我可以推送冲突的子文档?
What's going on here? Why can I push conflicting subdocuments?
推荐答案
长话短说:Mongo不支持子文档的唯一索引,尽管它允许创建他们......
Long story short: Mongo doesn't support unique indexes for subdocuments, although it allows creating them...
这篇关于子文件上的Mongoose唯一索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!