Mongodb唯一索引

时间:2014-02-06 14:19:08

标签: spring mongodb indexing mongodb-indexes

我尝试根据两个字段创建一个唯一的多键索引:

我的文件:

> db.users.find().pretty()
{
        "_class" : "bean.User",
        "_id" : ObjectId("52f3945e2f9d426e9dcb1ac8"),
        "commandes" : [
                {
                        "idCommande" : 1,
                        "nom" : "toto",
                        "prenom" : "TATA",
                        "adresse" : "",
                        "ville" : "Brest",
                        "codePostal" : "29200",
                        "montantTotal" : 0,
                        "voyagesSouscrits" : [
                                {
                                        "idVoyage" : "123",
                                        "duree" : 10,
                                        "nbPersonnes" : 0,
                                        "villeDepart" : "Nantes",
                                        "prixVoyage" : 100000
                                }
                        ]
                }
        ],
        "mail" : "toto@toto.fr",
        "password" : "1234"
}

我已经确保邮件上有唯一索引。 现在我想为每个“idCommande”创建一个独特的约束,然后就不可能在我的用户的“commandes”中创建一个带有相同“idCommande”的“commande”。

我试过了

db.users.ensureIndex({_id : 1, idCommande : 1 },{unique :true});

还有:

db.users.ensureIndex({_id : 1, idCommande : 1 },{unique :true, multikey : true});

但是我可以插入相同的“idCommande”。

我知道addToSet存在,但我不希望对我的全局文档进行约束

你有什么想法吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

我认为

db.users.ensureIndex({_id: 1, "commandes.idCommande" : 1 },{unique :true})

应该足够了

答案 1 :(得分:0)

答案不应该是

  

db.users.ensureIndex({“commandes.idCommande”:1},{unique:true});

这将阻止'idCommande'重复输入。