У меня есть удаленные процессы, которые генерируют объекты JSON и отправляют их на сервер, который затем хранится в MongoDB. Я хотел бы хранить эти объекты в том, что я назвал бы строками (исходя из фона SQL) в «основной» коллекции, например:
Результаты (Основная коллекция)
Results.Day
Results.Day.1.Data
Results.2
Results.Day.2.Data
так далее
Я использую upsert, потому что с течением дня некоторые результаты будут восстановлены удаленными процессами, поэтому потребуется обновление. В настоящее время я могу сохранить Results.Day.1, однако, когда я пытаюсь восстановить Results.Day.2, я получаю сообщение об ошибке, говорящее, что у меня есть дубликат ключа.
Я использую следующий запрос для моего первого upsert:
{_id: ‘UUID’, Results.Day: {«$ eq»: 1}}
и для второго upsert:
{_id: ‘UUID’, Results.Day: {«$ eq»: 2}}
Возможно ли это сделать, и если да, то как я могу это сделать? Буду признателен за ваши мысли по этому поводу. Очевидно, я не эксперт по NoSQL, но из моего ограниченного понимания может показаться, что мне нужно вставлять «строки» в виде массивов, но как я это делаю, я не знаю.
У меня есть доступ к исходному коду как для клиента, так и для сервера, поэтому я могу изменить то, что необходимо для достижения этой цели, поэтому я был бы очень признателен за помощь в этом.
Я использую для Сервера
MongoDB v3.0.4 в Linux и драйвер c ++ legacy-0.0-26.
Windows 7 x64 и такой же драйвер для клиента.
РЕДАКТИРОВАТЬ:
Хорошо, на основании комментариев ниже и дальнейшего чтения я вижу, что просто не могу изменить ключ _id. Однако, если я вручную создаю документ, имитирующий то, чего я пытаюсь достичь в коде, я могу загрузить его в базу данных без ошибок:
{
"_id": "aebc483c-5832-45ac-8a43-16b2c591b520",
"Results":
{
"Day":
{
"19":
{
"Data":
{
Blah
}
},
"201":
{
"Data":
{
More Blah
}
}
}
}
}
Но когда я расстаюсь с использованием:
{
"_id": "aebc483c-5832-45ac-8a43-16b2c591b520",
"Results":
{
"Day":
{
"20":
{
"Data":
{
Blah
}
}
}
}
}
Он заменяет то, что у меня уже есть в базе данных, вместо того, чтобы вставлять день 20 в коллекцию, разумеется, это не то, что я хочу. Мысли кто-нибудь?
Задача ещё не решена.