@mozart1337

Какой сделать запрос mongodb?

{
	nick: 'testNick',
	params: [{
		nick2: 'testNick2',
		unique: true
	}, {
		nick2: 'testNick3'
	}]
}


Структура данных такая. Известен nick и nick2. Нужно обновить массив params (в частности параметр unique), где nick2 равен известному nick2. Возможные ситуации:
1. В массиве params может не быть массива где nick2 есть
2. В документе вообще может не быть массива params
3. Может вообще не быть документа

В любой из этих ситуаций должно быть создано:
{
	nick: 'testNick',
	params: [{
		nick: 'testNick2',
		unique: true
	}]
}


Вроде примерно объяснил. Реально ли выполнить такое, за один запрос к монге?
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
@lega
Делайте такую структуру, чтобы было просто и быстро писать/читать данные (если вы хотите чтобы эффективно работало на больших данных).

Например в вашем случае подойдет:
db.col.update({_id: 'testNick'}, {$set: {'nick2.testNick2': true}}, true)

_id: 'testNick' - дает уникальность по nick в пределах колекции (и использует основной индекс по делу, не нужно создавать дополнительный индекс - экономия памяти).
'nick2.testNick2': true - использование словаря вместо массива дает уникальность в пределах документа.
Множественный вызов команды не создает дублей.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы