【问题标题】:Mongodb Unique indexMongodb唯一索引
【发布时间】:2014-02-06 14:19:07
【问题描述】:

我试图创建一个基于两个字段的唯一多键索引:

我的文件:

> 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 存在,但我不想限制我的全局文档

你有什么想法吗?

提前致谢

【问题讨论】:

  • 我不明白。 idDocument 不是您文档的一部分。
  • 抱歉不知道为什么我写了 idDocument .... 它是 "idCommande" ...

标签: spring mongodb indexing mongodb-indexes


【解决方案1】:

我觉得

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

应该够了

【讨论】:

    【解决方案2】:

    答案应该是不

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

    这将防止 'idCommande' 出现重复条目​​。

    【讨论】:

    • 好吧,OP 说它不应该是全球唯一的。另一方面,OP 还要求 idDocument,而不是 idCommande 的唯一性...
    • ìdDocument`是他的想象。他想要的只是ìdCommande的独特性
    • 看来我没有读心的资格。这些不是我要找的机器人。
    • @user2323241 你能确认/决定你想要什么吗?
    • 现在我明白你的问题了。简单的答案是你不能在 MongoDB 中做到这一点。索引旨在跨文档而不是文档内。您可以在将文档插入 mongoDB 之前添加此验证。希望这会有所帮助。
    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 2016-10-28
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2012-09-03
    相关资源
    最近更新 更多