Я пытался следовать решению, упомянутому здесь Как я могу запросить MongoDB с диапазоном дат, используя mgo и Go? , но я не могу получить результаты для диапазона dob. «dob» в mongodb хранится как:
"dob": {
"$date": "1967-06-28T00:00:00.000Z"
}
Без запроса dob все работает нормально. Я пытался переключить $ lt и $ gt, но все же не повезло. Кто-нибудь знает, как заставить это работать? Я распечатал dobLower
и dobUpper
, и они, похоже, являются действительными датами вроде 2000-06-28 21:57:06.666025643 +0000 UTC
. Модель для Доб
Dob time.Time
json:"dob" bson:"dob"
ageLower, err := strconv.Atoi(filters["ageLower"])
ageUpper, err := strconv.Atoi(filters["ageUpper"])
heightLower, err := strconv.Atoi(filters["heightLower"])
heightUpper, err := strconv.Atoi(filters["heightUpper"])
if err != nil {
return nil, err
}
dobUpper := time.Now().AddDate(-ageLower, 0, 0)
dobLower := time.Now().AddDate(-ageUpper, 0, 0)
pColl := s.DB("mydb").C("profiles")
query := bson.M{
"$and": []bson.M{
bson.M{"active": bson.M{"$eq": true}},
bson.M{"gender": bson.M{"$ne": u.Gender}},
bson.M{"_id": bson.M{"$nin": u.HiddenProfiles}},
bson.M{"_id": bson.M{"$ne": u.ProfileID}},
bson.M{"dob": bson.M{"$gt": dobLower , "$lt": dobUpper}},
bson.M{"height": bson.M{"$gt": heightLower, "$lt": heightUpper}},
},
}
return pColl.Find(query).Select(bson.M{"first_name": 0}).All(&profiles)
Помощь будет высоко ценится. Спасибо.