2014-02-06 3 views
0

я пытаюсь создать уникальный индекс ключам на основе двух полей:MongoDB Уникальный индекс

Мой документ:

> 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" : "[email protected]", 
     "password" : "1234" 
} 

Я уже обеспечивают уникальный индекс на мою почту. И теперь я хочу создать уникальное ограничение для каждой «idCommande», тогда было бы невозможно создать «команду» с той же «idCommande» в «командах» моего пользователя.

я попробовал

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

, а также:

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

но я стил может вставить же "idCommande".

Я знаю addToSet существует, но я не хочу Ограничить на мой глобальный документ

У вас есть какие-либо идеи?

Заранее спасибо

+0

Я не понимаю. 'idDocument' не является частью вашего документа. – mnemosyn

+0

Извините, не знаю, почему я написал idDocument .... Это «idCommande» ... – Lombric

ответ

0

Я думаю

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

должно быть достаточно

+0

Не работает, я все равно получаю дубликаты idCommande – Lombric

0

Нет, ответ должен быть

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

Это предотвратит дублирование записей для 'idCommande'.

+1

Ну, ОП сказал, что он не должен быть глобально уникальным. С другой стороны, OP также запрашивает 'idDocument', а не за уникальность' idCommande' ... – mnemosyn

+1

«Документ» - это его воображение. Все, что он хочет, - это уникальность для «dCommande». – vmr

+0

Кажется, я не способен к чтению ума. Это не дроиды, которые я ищу. – mnemosyn

Смежные вопросы