はい。これが、javascript Array.prototype.slice()
の方法です。 メソッドは機能します。これはmongodbによって内部的に使用されます。
ECMAScript®言語仕様 によると 、
あなたの場合、relativeStart is -10
、k = max((-10+5),0), k = 0;
(ここで、5
は配列の長さです。
したがって、k
またはskip
常に0
になります 、これらの場合。
はい、射影演算子はそのように機能します。 inclusion
でない限り またはexclusion
が射影パラメータで明示的に指定されている場合、ドキュメント全体が$slice
などの射影演算子を使用して取得されます。 、$elemmatch
適用されています。
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
返されます:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
findOne()
の2番目のパラメーター メソッドはnot only for simple projection
目的、フィールドはない field
のいずれかが 名前の値は0
または1
彼らに対して。そうでない場合は、ドキュメント全体が返されます。いずれかのフィールドにprojection operator
がある場合 適用される場合は、applied
およびprojected
。
投影メカニズムのようです $slice
の場合は常に、以下の方法で発生します オペレーターが関与しています。
- デフォルトでは、すべてのフィールドが投影に含まれます。
- デフォルトでは、値が射影演算子
$slice
に基づいて導出されるすべてのフィールド 、真実の場合 、以下に関係なく、常に表示されます。
除外または包含のために行われる手順。
- 射影パラメータで指定されたフィールドのリストは、指定された順序で累積されます。
- 値「0」または「1」で検出された最初のフィールドのみ :フィールドの値が「0」の場合は除外され、残りのすべてのフィールドが含まれるようにマークされます。フィールドの値が「1」の場合は含まれ、残りのすべてのフィールドが除外されるようにマークされます。
- 後続のすべてのフィールドについて、それらの値に基づいて除外または含まれます。