0
で、前と次の要素を取得します:私は次の2つの要素を返します。次のクエリを作ったの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
}
]
}
は、Array を形成の後に特定のタイムスタンプ。私は必要なもの
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
]
これは機能しません。どうすればこの問題を解決できますか? 2つの別々のクエリは、期間のためにオプションではありません。
私も '$ indexOfArray'で何かしようとしていました。これの問題は、私はこれらの要素の正確な時刻を知らないということです。 '$ indexOfArray'の例では、イベントのbeforとbehindを得るために、正確なタイムスタンプ214845が必要です。 [ここでテスト] (https://gist.github.com/iwaynee/5ad41b8db2260019eaf524b67910bd27) ところで:$のsubstract' 'でただ1及びません-1 – noscript
たちのquerysを組み合わせることで、解決策を見つけた場合。 https://gist.github.com/iwaynee/4321c696e08acfad5e4042b32081d4b9 上記のクエリを修正できる場合は、私はあなたの答えを受け入れるでしょう:) – noscript