Here is my mongodb database :
"_id" : ObjectId("58808d735ba19c2797f486ca"),
"userid" : ObjectId("58808d735ba19c2797f486c9"),
"history" : [
{
"floorId" : "309cf96f-1812-44f6-8d94-d5ce2b8839be",
"time" : ISODate("2017-01-19T09:57:34.572Z"),
"position" : {
"latitude" : 48.815267598833806,
"longitude" : 2.3630101271630677
},
"pointcoordinates" : {
"pointX" : 503.82333,
"pointY" : 339.00385
}
},
{
"floorId" : "309cf96f-1812-44f6-8d94-d5ce2b8839be",
"time" : ISODate("2017-01-19T09:57:34.574Z"),
"position" : {
"latitude" : 48.815267598833806,
"longitude" : 2.3630101271630677
},
"pointcoordinates" : {
"pointX" : 503.82333,
"pointY" : 339.00385
}
}, ... This array is very huge !
I want to retrieve some values from "history" on a date range.
First of all, I need to select the object of the "userid" I want to access then select "history". Then get values between date range I know.
I'm using Golang with mgo.v2 (mongodb) driver.
Here is my code :
id := queryValues.Get("id")
startTime := queryValues.Get("startTime")
endTime := queryValues.Get("endTime")
//Here I get times in forme time.Time
t_startTime, err := time.Parse(time.RFC3339Nano, startTime)
t_endTime, err := time.Parse(time.RFC3339Nano, endTime)
oid := bson.ObjectIdHex(id)
//I select the range of time what I want
selector := bson.M{"history": bson.M{"time": bson.M{"$gte": t_startTime, "$lte": t_endTime}}}
if err := uc.session.DB("TEST").C("history").Find(bson.M{"userid": oid}).Select(selector).All(&history); err != nil {
fmt.Println(err)
SendError(w, "GetHistory", "Error retrieving history")
} else {
spew.Dump(history)
}
I got an error :
Can't canonicalize query: BadValue Unsupported projection option: history: { time: { $gte: new Date(1484819854576), $lte: new Date(1484819854576) } }
Can someone please help ?