Уникальный индекс в списке вложенных документов, индексируемый одним ключом - PullRequest
1 голос
/ 06 августа 2011

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

У меня есть коллекция с таким форматом:

{
  domain: "google.com"
  counters: [
    { day: "2011-08-03", metric1: 10, metric_2: 15 }
    { day: "2011-08-04", metric1: 08, metric_2: 07 }
    { day: "2011-08-05", metric1: 20, metric_2: 150 }
  ]
}

Я пыталсячто-то вроде этого:

db.test.ensureIndex({ domain: 1, 'counters.day': 1 }, { unique: true }).

с upsert и $ push , но это не работает.

Затем я попытался с upsert и $ addToSet .но я не могу установить уникальные поля.

Мне нужно нажать новый счетчик, если день существует, его следует заменить.

1 Ответ

1 голос
/ 06 августа 2011

Уникальные индексы, работающие только для корневого документа, но не для встроенного.Это значит, что вы не можете вставить два документа с одинаковым доменом и counters.day.Но вы можете вставить во встроенные counters дублированные строки.

Мне нужно нажать новый счетчик, если день существует, его следует заменить.

При попытке вставить новый внедренный документ, вы должны проверить, если документ стакой день существует, и если он существует, обновите его, в противном случае вставьте.

...