Я использую официальный драйвер mongo-driver
mon go для Go. У меня ниже указатель по коллекции,
// 1
[
{
"v": NumberInt("2"),
"key": {
"_id": NumberInt("1")
},
"name": "_id_",
"ns": "cgrates.cdrs"
},
{
"v": NumberInt("2"),
"key": {
"setuptime": NumberInt("-1"),
"account": NumberInt("1"),
"runid": NumberInt("1")
},
"name": "setuptime_NumberInt(\"-1\")_account_NumberInt(\"1\")_runid_NumberInt(\"1\")",
"ns": "cgrates.cdrs"
}
]
А ниже выглядит мой фильтр в коде golang.
filter := bson.M{"setuptime": bson.M{"$gt": startTime, "$lt": endTime}, "account": account, "runid": "*default", "originid": callId}
Поскольку у меня есть составной индекс, я хотел, чтобы драйвер golang отправлял запрос точно в том же порядке, который я указал выше.
Но поскольку фильтр - это карта, то golang не дает гарантии его целостности. В конце концов, я вижу, что мой golang драйвер отправляет запросы не по порядку.
B....................K....update.....cdrs..lsid......id............A\.2.2......$db.....cgrates.......updates......q......account.....5ee919c63181373a24762676..runid.....*default..originid.%...161060e7-2a37-1239-7684-560001951c52..setuptime......$gt..)..r....$lt.....r......u......$set.#....extrafields.Paid.....0.00125....
Пожалуйста, проверьте, что запрос отправляется на пн go, вы можете заметить, что время установки было последним. В фильтре он был на первой позиции.
Как сохранить порядок запросов без изменений или как делать запросы на основе индексов? Mongodb обрабатывает это автоматически?