我尝试按照这里提到的解决方案 How can I query MongoDB with date range using mgo and Go? 进行操作,但是我似乎无法获得关于dob范围的结果。在mongodb中,“dob”被存储为:
"dob": {
"$date": "1967-06-28T00:00:00.000Z"
}
没有dob查询时它可以正常工作。我尝试了切换$lt和$gt,但仍然没有运气。有人知道如何让它工作吗?我已经打印出dobLower和dobUpper,它们似乎都是有效的日期,比如2000-06-28 21:57:06.666025643 +0000 UTC。dob的模型是
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)
希望能得到帮助,非常感谢。