2017-10-30 16 views
0

サーバのmongoのバージョンは3.4.4です。 Studio 3Tで接続しました。 私はIntelliShellmongodbで集合体を使用してデータを取得できません

db.orders.aggregate([ 
    { $limit: 10 }, 
    { $skip: 10 } 
]) 

でこのようにクエリを実行すると、私は何も返されません取得します。
しかし、私は$限度を切り替えると$スキップ、

db.orders.aggregate([ 
    { $skip: 10 }, 
    { $limit: 10 } 
]) 

たときにそれが正常に動作します。

+0

さて、あなたは* "私にちょうど10の結果を得て、それらの過去10をスキップする" *と尋ねました。一方、2番目の声明では「10の結果をスキップして、次の10を返す」と記載されています*。それで意味論的な言い方をすれば、それらがどう違うのかを見るのは難しいことではありません。 –

+0

シーケンスが内部的にどのように得られるかを正確に示す[$ skip + $ limit Sequence Optimization](https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#skip-limit-sequence-optimization)も参照してください。最初の試行が失敗する理由の直接的な例を示しています。要するに、秒は '{$ limit:20}、{$ skip:10}'に最適化されます。 –

+0

しかし、なぜモンゴブはそれらを同じものとして扱いませんか? –

答えて

1

これが私の理解です: $limit: 10は、 と$skip「私は最初の数十を必要としない」を意味「私は10件の結果が欲しい」という意味します。
したがって、最初のクエリでは0の結果が得られ、2番目のクエリでは10-20の結果が得られます。

関連する問題