第二:如果skip为负并且|skip|高于 list.length 那么它返回前三个元素,就好像skip==0一样
是的。 javascript就是这样的Array.prototype.slice()
方法有效,这是 mongodb 内部使用的。
根据ECMAScript® 语言规范,
如果relativeStart为负数,则令k为max((len +relativeStart),0);
否则令 k 为 min(relativeStart, len)。
在你的情况下relativeStart is -10
,
k = max((-10+5),0), k = 0;
(在哪里,5
是数组的长度)。
Hence k
or skip
一直会0
,在这些情况下。
第一:它返回一个完整的对象,而不是仅返回一个带有 ["_id","List"] 键的对象。
是的,投影算子就是这样工作的。除非一个inclusion
or exclusion
在投影参数中显式指定,则使用投影运算符检索整个文档,例如$slice
,$elemmatch
正在应用。
db.items.findOne({},{"_id":1,"List": { "$slice": [-10, 3 ] }})
会返回:
{ "_id" : ObjectId("542babf265f5de9a0d5c2928"), "List" : [ 1, 2, 3 ] }
第二个参数为findOne()
方法是not only for simple projection
目的,字段是not预计,仅当其中任何一项field
名称的值为0
or 1
反对他们。如果不是,则返回整个文档。如果任何字段有projection operator
要应用的话,它将是applied
and projected
.
投影机构seems以下面的方式发生,每当$slice
涉及运营商。
- 默认情况下,所有字段都将包含在投影中。
- 默认情况下,其值是基于投影运算符导出的所有字段,
$slice
, 如果是真的,始终显示,与下面的情况无关。
正在采取的排除或包含步骤。
- 投影参数中指定的字段列表按其指定的顺序累积。
-
仅适用于遇到值“0”或“1”的第一个字段:
如果
字段的值为“0” - 那么它被排除,并且所有剩余的
字段被标记为包含在内。
如果某个字段具有“1” - 则包含该字段,以及所有剩余字段
被标记为排除。
- 对于所有后续字段,它们的排除或包含基于
他们的价值观。