Я работаю над сложной задачей MongoDB. У меня есть база данных, которая состоит из следующих записей:
{
_id: ObjectId('5f2d210e6c5044b23f462e1b'),
Identifier: 'Y',
Year: 2020,
InsertionDate: ISODate('2020-08-07T07:44:41.095Z'),
LastUpdateDate: ISODate('2020-08-07T07:44:41.095Z'),
Variable1: [
{
Date: ISODate('2020-07-10T00:00:00.000Z'),
Value: 6
}
],
Variable2: [
{
Value: 4,
Date: ISODate('2020-07-10T00:00:00.000Z')
},
{
Value: 5,
Date: ISODate('2020-07-11T00:00:00.000Z')
},
{
Value: 7,
Date: ISODate('2020-07-11T00:00:00.000Z')
}
]
},
{
_id: ObjectId('5f2d210e6c5044b23f462e1b'),
Identifier: 'X',
Year: 2020,
InsertionDate: ISODate('2020-08-07T07:44:41.095Z'),
LastUpdateDate: ISODate('2020-08-07T07:44:41.095Z'),
Variable1: [
{
Date: ISODate('2020-07-10T00:00:00.000Z'),
Value: 6
}
],
Variable2: [
{
Value: 5,
Date: ISODate('2020-07-10T00:00:00.000Z')
},
{
Value: 5,
Date: ISODate('2020-07-11T00:00:00.000Z')
}
]
}
Используя следующий код, я хотел бы отдельно добавить данные в Variable1 и Variable2, учитывая тот факт, что вставленные данные отличаются от существующих данных. Проблема, с которой я сталкиваюсь с приведенным ниже кодом, заключается в том, что данные добавляются, даже если значение одинаковое, а дата отличается. Однако я хочу добавить в список только если значение изменится. Идея состоит в том, чтобы сохранять значения только тогда, когда они меняются с течением времени для каждой категории.
now = dt.datetime.utcnow()
db.collectionName.update_one({"Year": 2020, "Identifier": "X"},
{'$addToSet': {'Variable1': {"Value": 5,
"Date": dt.datetime(2020, 7, 11)},
'Variable2': Item(Date = dt.date(2020, 7, 10), Value = 6).to_mongo()
},
"$setOnInsert": {"InsertionDate": now},
"$set": {"LastUpdateDate": now},
}, upsert = True)
Есть ли у вас какие-либо предложения, как решить эту проблему?
У вас также есть идея, как это сделать впоследствии агрегировать данные так, чтобы для каждого идентификатора были указаны новейшие Variable1 и Variable2?