2016-01-13 2 views
0

Ниже моя дб структураНе удалось создать уникальный индекс при обновлении поддокумента в mongodb?

{"dname" : "a", "accounts" : [ 
     { 
      'userId':'1', 
      'name':'xyz' 
     } 
    ] 
} 

Как я добавил uniqueindex dname_1, dname_1_accounts.userId_1 в коллекции, но когда в обновлении, когда я использую нажимной запрос, как показано ниже

{$push:{"accounts" :{'userId':'1','name':'abc'}}} 

или

{$addToSet:{"accounts" :{'userId':'1','name':'abc'}}} 

Он не дает ошибку уникального ключа или любого другого вида, он добавляет дублирующее значение ключа в документ

{"dname" : "a", "accounts" : [ 
      { 
       'userId':'1', 
       'name':'xyz' 
      }, 
      { 
       'userId':'1', 
       'name':'abc' 
      } 

     ] 
    } 

Как избежать этой проблемы с помощью запросов nativemongo?

ответ

1

db.coll.update ({"dname": "a", "accounts.userId": {$ ne: '1'}}, {$ push: {"accounts": {'userId': ' 1' , „имя“: „а“}}})

это не даст ошибку, но также избежать вставок дубликатов ключа USERID в массиве счетов

+0

, пожалуйста, предложите, если есть какие-либо другие решения проблемы –

1

Поскольку ваш userId хранится внутри от accounts, ваш индекс должен был бы быть на

accounts.userId 

Run

db.coll.createIndex({ 'accounts.userId': 1 }, { unique: true }) 

и вашей второй вставки заявления должны теперь потерпеть неудачу.

+0

Я пытался, но все еще не для того чтобы достигнуть это –

+0

я удалил все документы, но все же я не могу избежать дубликатов –

+0

есть ли какой-либо способ в monongonative для проверки uniqueindex при вставке того же вложенного документа, чтобы избежать дубликатов –