Даты на моем mongoDB и в моей структуре имеют значения типа "02/10/2018 11:55:20".
Существует несколько способов, которыми вы могли быделать.Во-первых, как упоминалось в комментарии, это преобразование даты string
в фактический формат даты.Смотрите также MongoDB Date .Хранение значений даты в правильном формате даты является рекомендуемым способом для производительности.
Если у вас есть документ:
{ "a": 1, "b": ISODate("2018-10-02T11:55:20Z") }
Используя mongo-go-driver (текущий v0.0.15), вы можете сделать следующее, чтобы найти и сравнить, используя дату:
initDate, err := time.Parse("02/01/2006 15:04:05", "01/10/2018 11:55:20")
filter := bson.VC.DocumentFromElements(
bson.EC.SubDocumentFromElements(
"b",
bson.EC.Time("$gt", initDate),
),
)
cursor, err := collection.Find(context.Background(), filter)
Обратите внимание на значение макета в примере выше для time.Parse()
.Это должно соответствовать расположению строки / формату.
Альтернативным способом без преобразования значения является использование MongoDB Aggregation Pipeline .Вы можете использовать оператор $ dateFromString для преобразования даты string
в дату, а затем использовать этап $ match для фильтрации по дате.
Например, предоставленные документы:
{ "a": 1, "b": "02/10/2018 11:55:20" }
{ "a": 2, "b": "04/10/2018 10:37:19" }
Вы можете попробовать:
// Add a new field called 'newdate' to store the converted date value
addFields := bson.VC.DocumentFromElements(
bson.EC.SubDocumentFromElements(
"$addFields",
bson.EC.SubDocumentFromElements(
"newdate",
bson.EC.SubDocumentFromElements(
"$dateFromString",
bson.EC.String("dateString", "$b"),
bson.EC.String("format", "%d/%m/%Y %H:%M:%S"),
),
),
),
)
initDate, err := time.Parse("02/01/2006 15:04:05", "02/10/2018 11:55:20")
// Filter the newly added field with the date
match := bson.VC.DocumentFromElements(
bson.EC.SubDocumentFromElements(
"$match",
bson.EC.SubDocumentFromElements(
"newdate",
bson.EC.Time("$gt", initDate),
),
),
)
pipeline := bson.NewArray(addFields, match)
cursor, err := collection.Aggregate(context.Background(), pipeline)