I’m using the CosmosDB on Azure with MongoDbApi. In my Flask service I use pymongo.
My collection consists of a documents similar to this:
<code>{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": [
{
...,
"events": [
...
],
"type": "NG"
},
{
...,
"events": [
...
],
"type": "Legacy"
}
],
"snapshot_timestamp": 1234567
}
</code>
<code>{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": [
{
...,
"events": [
...
],
"type": "NG"
},
{
...,
"events": [
...
],
"type": "Legacy"
}
],
"snapshot_timestamp": 1234567
}
</code>
{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": [
{
...,
"events": [
...
],
"type": "NG"
},
{
...,
"events": [
...
],
"type": "Legacy"
}
],
"snapshot_timestamp": 1234567
}
I have a set of functions (basically simple queries) that update the file. An example one would be something like this:
<code>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"}
]
)```
Sometimes I see a corrupted document that looks like this:
``` lang-json
{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": {
"$[outer]": {
...,
"events": [
...
],
"type": "NG"
},
},
"snapshot_timestamp": 1234567
}
</code>
<code>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"}
]
)```
Sometimes I see a corrupted document that looks like this:
``` lang-json
{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": {
"$[outer]": {
...,
"events": [
...
],
"type": "NG"
},
},
"snapshot_timestamp": 1234567
}
</code>
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"}
]
)```
Sometimes I see a corrupted document that looks like this:
``` lang-json
{
"file_name": "foo",
"date": "2024-05-07",
"count": 1,
"deliveries": {
"$[outer]": {
...,
"events": [
...
],
"type": "NG"
},
},
"snapshot_timestamp": 1234567
}
I’m really trying to find the source of this, but there is no update operation where I use a single "$set": {"delivery.$[outer]"}
. This happens exteremely rarely. Unfortunately I can’t find any type of trace or path that causes this. Is there any way where the update() operation can cause this behavior?
5