CosmosDB с PyMongo заменяет поле массива в документе буквальным поддокументом фильтра массива.Python

Программы на Python
Anonymous
CosmosDB с PyMongo заменяет поле массива в документе буквальным поддокументом фильтра массива.

Сообщение Anonymous »

Я использую CosmosDB в Azure с MongoDbApi. В своем сервисе Flask я использую pymongo.
Моя коллекция состоит из документов, подобных этому:

Код: Выделить всё

{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": [
{
...,
"events": [
...
],
"type": "NG"
},
{
...,
"events": [
...
],
"type": "Legacy"
}
],
"snapshot_timestamp": 1234567
}
У меня есть набор функций (в основном простых запросов), которые обновляют файл. Примером может быть что-то вроде этого:

Код: Выделить всё

collection.update_one(
{
"file_name": ...,
"snapshot_timestamp": ...,
},
{
"$set": {
"deliveries.$[outer].type": "NG",
"deliveries.$[outer].foo": "bar",
"count": 5
},
"$push": {
"deliveries.$[outer].some_array": "some_value"
}
},
upsert=True,
array_filters=[
{"outer.x": "y"}
]
)
Иногда я вижу поврежденный документ, который выглядит следующим образом:

Код: Выделить всё

{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": {
"$[outer]": {
...,
"events": [
...
],
"type": "NG"
},
},
"snapshot_timestamp": 1234567
}
Я действительно пытаюсь найти источник этого, но нет операции обновления, в которой я использовал бы один "$set": {"delivery.$[outer]"}< /код>. Такое случается крайне редко. К сожалению, я не могу найти какой-либо след или путь, вызывающий это. Есть ли способ, при котором операция update() может вызвать такое поведение?


Подробнее здесь: https://stackoverflow.com/questions/787 ... l-array-fi

Вернуться в «Python»