2015-12-09 3 views
0

У меня есть эта структура документа, свойство «Name» должно быть уникальным для всех документов, как показано выше:MongoDB уникальный индекс по нескольким поддокументами

{ 
    "_id" : ObjectId("56686341d6389c004c689d5d"), 
    "Bosses" : { 
     "B1" : { 
      "_id" : NumberInt(1), 
      "Name" : "John" 
     }, 
     "B2" : { 
      "_id" : NumberInt(1), 
      "Name" : "Mary" 
     } 
    } 
} 

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : { 
     "B1" : { 
      "_id" : NumberInt(1), 
      "Name" : "Mary" // should throw an error 
     } 
    } 
} 

Можно создать уникальный индекс с этой структурой?

+0

Может быть, это поможет вам https://docs.mongodb.org/manual/tutorial/create-a-unique-index/ –

ответ

1

Да, вам нужно создать уникальный индекс на Bosses.Name. Но тогда вам придется немного изменить вашу схему. Bosses должен быть массивом:

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : [ 
     { 
      "_id" : NumberInt(1), 
      "Name" : "Mary" // should throw an error 
     } 
    } 
} 

Если вам действительно нужно B1, я предлагаю вам добавить его в Bosses объектов: «Код»: «B1». Но это может быть не нужно, так как вы можете получить доступ к индексу в массиве с помощью ...find({ "Bosses.0.Name" })

+0

I действительно необходимо сохранить исходную структуру из-за https://jira.mongodb.org/browse/SERVER-3326. Я знаю, что это не лучшее решение, но при обновлении босса он дважды избегает вызовов в базу данных. –

+0

Не могли бы вы объяснить больше проблем, связанных с вашим решением? Может быть, сообщество может помочь вам построить ваше решение по-другому. –