0
포함 된 배열의 이전 및 다음 요소를 가져옵니다 : 내가 돌아갑니다 다음 쿼리를했습니다MongoDB를 : 나는 다음과 같은 구조를 가지고있는 데이터베이스있다
{
"_id" : ObjectId("59b8d72ab515211f3c161c4b"),
"Transport_event_id" : 1,
"Carrier_id" : 23,
"Payload_id" : 0,
"StartTime" : 214392.0,
"EndTime" : 362707.0,
"Move_events" : [
{
"Timestamp" : 214398,
"x_pos" : 13,
"y_pos" : 202
},{
"Timestamp" : 214845,
"x_pos" : 12,
"y_pos" : 202
},{
"Timestamp" : 216399,
"x_pos" : 12,
"y_pos" : 216
},{
"Timestamp" : 216842,
"x_pos" : 11,
"y_pos" : 216
},{
"Timestamp" : 219586,
"x_pos" : 10,
"y_pos" : 216
}
]
}
다음 두 요소가 배열을 형성 이후에 특정 타임 스탬프. 내가 필요로 무엇
var cursor = db.Transport_eventBeta.aggregate([
{ "$match": { "StartTime": { "$lte": query_time } } },
{ "$match": { "EndTime": { "$gte": query_time } } },
{
"$project": {
"Move_events": {
"$let": {
"vars": {
"filtered": {
"$filter": {
"input": "$Move_events",
"as": "event",
"cond": { "$lte": ["$$event.Timestamp" , query_time] }
}
}
},
"in": {
"$slice": [
"$Move_events",
{"$size": "$$filtered"},
2
]
}
}
},
"Carrier_id": 1
}
}
])
while (cursor.hasNext()) {
print(cursor.next());
}
는 befor을하고이 특정 타임 스탬프 후 문서를 이다. 이 종류의 어떤 것 :
"$slice": [
"$Move_events",
{"$size": "$$filtered"} - 1,
2
]
그러나 이것은 작동하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 두 개의 별도 쿼리는 기간 때문에 옵션이 없습니다.
나는 또한 $ indexOfArray를 사용하여 무언가를하려고 시도하고있었습니다. 이 문제는 이러한 요소의 정확한 시간을 알 수 없다는 것입니다. 예를 들어'$ indexOfArray'는 이벤트를 befor 및 뒤에 얻으려면 214845의 정확한 타임 스탬프가 필요합니다. [여기에서 시험] (https://gist.github.com/iwaynee/5ad41b8db2260019eaf524b67910bd27) BTW한다 : $ substract' '에서 단지 하나가 아닌 -1 – noscript
우리 querys을 조합하여 솔루션을 발견하는 경우. https://gist.github.com/iwaynee/4321c696e08acfad5e4042b32081d4b9 위의 검색어를 수정할 수 있다면 답변을 수락하겠습니다. :) – noscript