Мне нужны некоторые идеи / советы для этого. Вот пример документа, который я храню:
{
"_id" : new BinData(0, "C3hBhRCZ5ZFizqbO1hxwrA=="),
"gId" : 237,
"name" : "WEATHER STATION",
"mId" : 341457,
"MAC" : "00:00:00:00:00:01",
"dt" : new Date("Fri, 24 Feb 2012 13:59:02 GMT -05:00"),
"hw" : [{
"tag" : "Weather Sensors",
"snrs" : [{
"_id" : NumberLong(7),
"sdn" : "Wind Speed"
}, {
"_id" : NumberLong(24),
"sdn" : "Wind Gust"
}, {
"_id" : NumberLong(28),
"sdn" : "Wind Direction"
}, {
"_id" : NumberLong(31),
"sdn" : "Rainfall Amount"
}, {
"_id" : NumberLong(33),
"sdn" : "Rainfall Peak Amount"
}, {
"_id" : NumberLong(38),
"sdn" : "Barometric Pressure"
}],
"_id" : 1
}]
}
То, что я сейчас делаю, - это использование драйвера C # и выполнение .Save () для моей коллекции, но я хочу, чтобы мне показался гибридный подход. Вот отдельные операции, которые мне нужно выполнить:
- Сохранить весь документ, если он не существует
- Обновите поле dt новой отметкой времени, если документ существует
- Для поля hw мне нужно несколько вещей здесь. Если hw._id существует, обновите его поле тега, а также обработайте поле snrs, либо обновив существующие записи, чтобы обновить значение sdn, либо добавив совершенно новые значения, когда _id не существует
Ничто не должно быть удалено из массива hw, и ничто не должно быть удалено из массива snrs.
Стандартный upsert не дает мне того, чего я добиваюсь, поэтому я ищу лучший способ сделать то, что мне нужно, с минимальным количеством обращений к серверу. Я думаю, что некоторые из $ Operators могут быть тем, что мне нужно здесь, но просто нужно подумать о том, как лучше всего подойти к этому.
Суть того, что я здесь делаю, - это сохранение накопленного исторического документа записей snrs с текущим текущим значением, а также сохранение любых исторических записей в массиве, даже если они больше не "живы", сообщаются и т.д. Это позволяет в будущем сообщать о вещах, которые больше не существуют в настоящее время, но были в некоторый момент в прошлом. Значения _id генерируются приложением, глобально уникальны для всех документов и никогда не изменяются после первоначального создания. Например, на прошлой неделе сообщалось о «скорости ветра», а на этой неделе - нет. Однако значение _id не изменится, если «Скорость ветра» снова начнет сообщать. Следуйте
При необходимости могут быть предоставлены разъяснения или более подробная информация.
Спасибо.