2

timeフィールドに基づいて最初と最後のドキュメントを取得する方法を教えてください。 $groupを使用して$first$lastのドキュメントを取得できますが、ここではグループ化する必要はありません。最初と最後の完全なドキュメントを取得するだけです。たぶん私はsliceを使うことができますか?このクエリでは動作しません:MongoDBは集計クエリの最初と最後のドキュメントを取得します

{ 
    "aggregate": "353469045637980_data", 
    "pipeline": [ 
    { 
     "$match": { 
     "$and": [ 
      { 
      "time": { 
       "$gte": 1461369600 
      } 
      }, 
      { 
      "time": { 
       "$lt": 1461456000 
      } 
      } 
     ] 
     } 
    }, 
    { 
     "$project": { 
     "first": { 
      "$slice": 1 
     }, 
     "last": { 
      "$slice": -1 
     } 
     } 
    } 
    ] 
} 
+1

最初と最後の値は何ですか?もっと具体的にすることができますか、おそらくテスト文書の束と期待される出力を含めることができますか? – chridam

+0

私は2つのエントリ[first、last]を持つリストを期待しています。最初と最後はコレクションからの完全な文書です –

答えて

7

をさてあなたは$groupを必要とするが、それは単一のグループになりように、あなたは、単にそのidのために(例えばnullthe docsを参照)定数を使用することができます。 $$ROOTは、あなたが(あなたがリストを望む述べたように)あなたは配列にそのデータを整形するために、さらに$project段階を導入することができます。もちろん、そう

$group: { 
    _id: null, 
    first: { $first: "$$ROOT" }, 
    last: { $last: "$$ROOT" } 
} 

よう$first$lastで使用できる文書自体などを指し、

ステージを導入して、$first$lastが正しい意味を持つようにすることをお勧めします。

関連する問題