Егор
Использую motor + pymongo Коллекция имеет следующий вид записей:
{
'_id':0,
'data':[0,1,2],
'profit':30
},
{
'_id':1,
'data':[0,12,25],
'profit':37
}
Хочу обновить у записи поле data увеличив последний элемент массива на значение поля profit соответствующей записи. Т. е. при обновлении элемента с id = 1 Получится следующее:
{
'_id':1,
'data':[0,12,62],
'profit':37
}
Как можно это сделать ? Псевдокод выглядит как-то так:
await collection.update_one(
{"_id":1},
{'$inc':{
'data.-1':"$profit"
}}
)
NIX
Всем привет!
В bson есть поле с датой, но сохранено, как строка
Делаю индекс, который, получается будет строковый, а вот мне нужен индекс на дату
Есть какие-нибудь приблуды, которые бы говорили, что это должен быть индекс с датой, а не строкой?
Артем
Как можно оптимизировать коллекцию (индексы) и запрос к ней?
Есть коллекция с 10 миллионами документов
У документа есть поля:
- send_at, является ISODate
- sended_at, является ISODate или null
Индекс по двум полям существует, оба ASC
Запрос вида {"send_at": {"$lte": ISODate("2024-07-17T13:45:19.817Z")}, "sended_at": null} выполняется 7 — 10 секунд, explain выглядит так:
{
"stage": "FETCH",
"filter": {
"sended_at": {
"$eq": null
}
},
"nReturned": 0,
"executionTimeMillisEstimate": 7365,
"works": 11410813,
"advanced": 0,
"needTime": 11410812,
"needYield": 0,
"saveState": 14918,
"restoreState": 14918,
"isEOF": 1,
"docsExamined": 0,
"alreadyHasObj": 0
}
{
"stage": "IXSCAN",
"nReturned": 0,
"executionTimeMillisEstimate": 7242,
"works": 11410813,
"advanced": 0,
"needTime": 11410812,
"needYield": 0,
"saveState": 14918,
"restoreState": 14918,
"isEOF": 1,
"keyPattern": {
"send_at": 1,
"sended_at": 1
},
"indexName": "send_at_1_sended_at_1",
"isMultiKey": false,
"multiKeyPaths": {
"send_at": [],
"sended_at": []
},
"isUnique": false,
"isSparse": false,
"isPartial": false,
"indexVersion": 2,
"direction": "forward",
"indexBounds": {
"send_at": [
"[new Date(-9223372036854775808), new Date(1721223919817)]"
],
"sended_at": [
"[undefined, undefined]",
"[null, null]"
]
},
"keysExamined": 11410813,
"seeks": 11410813,
"dupsTested": 0,
"dupsDropped": 0
}
Егор
мужики, подскажите пожалуйста, никак не могу решение найти
Как в много обратиться к определному элементу массива и заменить его? mongo db
У меня есть записи формата:
'profit':[0,1,2],
'data':40
Как мне последний элемент массива profit увеличить на значение поля data?
Т е псевдокод выглядит так:
collection.update_many({}, {'$inc':{'profit.-1':"$data"}})
Andry
{
"_id" : "1",
"UserFields" : [
{
"Key" : "key1",
"Value" : "value",
"StoreId" : ""
},
{
"Key" : "key2",
"Value" : "value2",
"StoreId" : ""
}
],
"Name" : "Test",
"Count" : NumberInt(0),
"CreatedBy" : null,
"CreatedOnUtc" : ISODate("0001-01-01T00:00:00.000+0000"),
"UpdatedBy" : null,
"UpdatedOnUtc" : null,
"Phones" : [
],
"Category" : [
]
}