Upserting ‘строки’ mongodb

У меня есть удаленные процессы, которые генерируют объекты 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 в коллекцию, разумеется, это не то, что я хочу. Мысли кто-нибудь?

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]