mongo $slice查询反向索引超出范围

2023-12-07

mongo 中的以下查询表现得很奇怪:

db.items.findOne({},{ "List": { "$slice": [ skip, 3 ] }})

第一的: 它不是仅返回一个带有 ["_id","List"] 键的对象,而是返回一个完整的对象。

第二: 如果skip是负数并且|skip|高于 list.length 那么它返回前三个元素,就像skip==0

我期望:

{
       "_id" : ObjectId("542babf265f5de9a0d5c2928"),
       "List" : [
                1,
                2,
                3,
                4,
                5
        ]
        "other" : "not_important"
}

query:

db.items.findOne({},{ "List": { "$slice": [-10, 3 ] }})

to get:

{
       "_id" : ObjectId("542babf265f5de9a0d5c2928"),
       "List" : []
}

相反,我得到:

{
       "_id" : ObjectId("542babf265f5de9a0d5c2928"),
       "List" : [
                1,
                2,
                3
        ]
        "other" : "not_important"
}

Why?

我使用 mongoDB 2.4.10


第二:如果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” - 则包含该字段,以及所有剩余字段 被标记为排除。
  • 对于所有后续字段,它们的排除或包含基于 他们的价值观。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mongo $slice查询反向索引超出范围 的相关文章

随机推荐

  • 我可以在 Windows XP SP2 上使用哪些免费的 Powershell 编辑器?

    我家里有 Windows 7 和 Powershell 2 我非常喜欢免费版本的 PowerGUI Powershell 编辑器 我想在工作中开始使用 Powershell 但我们使用的是 XP SP2 上的 1 o 版本 我本来打算安装
  • 对 2 个相互依赖的表进行复杂的 SQL 更新

    我有一个数据库 其中有几个表跟踪电话 短信 数据和津贴 我正在尝试计算是否可以在不诉诸游标的情况下将电话分配给津贴 但我无法找到一种方法构造 SQL 来执行此操作 我的尝试没有得到任何有用的 SQL 因为我似乎不知道如何处理它 问题是 对我
  • lxml xpath 不会忽略“ ”

    我有这个 HTML td class 0 b Bold Text b nbsp a href a td td class 0 Regular Text nbsp a href a td 当使用 xpath 格式化时 new html tre
  • Android、Java 上的单选按钮列表

    我需要创建一个单选按钮列表 但如果我尝试使用 ListView 来完成此操作 我可以同时选择所有单选按钮 但我需要同时选择 1 个单选按钮 因此 我可以尝试这段代码 RadioGroup group new RadioGroup this
  • 使用 FCM 从服务器发送推送通知

    最近我问了一个关于使用GCM发送推送通知的问题 向 Android 发送推送通知 现在有了FCM 我想知道它与服务器端开发有什么不同 就编码而言 它们相同吗 在哪里可以找到显示从服务器向 Android 设备发送推送通知的示例 FCM 代码
  • 有没有办法在 Lightswitch 中基于下拉菜单创建搜索屏幕

    我想在搜索屏幕上的搜索框所在位置放置一个下拉列表 并将每个条目与不同的查询相关联 这是针对我的业务中使用的数据库 我们目前有太多屏幕 例如 所有设备 新设备 可用设备 出售设备 未付费设备 未付佣金 我正在使用 2012 RC 的 Ligh
  • 字符串重复被连字符替换C++

    我是编码的初学者 正在尝试这个问题 用连字符替换字符串中字母的所有重复 即 ABCDAKEA 将变为 ABCD KE 我使用了 switch 循环并且它有效 但我想让它更短 也许使用递归来使其更有效 有任何想法吗 include
  • iOS 绘制两端弯曲的矩形

    想象一个长矩形 尺寸可能为 200x20 所有侧面都有直边 在我的 iOS 应用程序中 这对我来说很容易绘制 CGContextFillRect context CGRectMake xLoc yLoc 200 20 现在 如果我希望较短的
  • 如何使用 Android 从 NFC 标签检测制造商?

    我正在尝试检测 NFC 标签的制造商名称 我找到了制造商代码here 但我只能使用这些 ID 检测 Mifare Ultralight C 标签 Ultralight C 标签 ID 的第一个字节代表制造商代码 但其他标签不包含此属性 Th
  • Typescript:通用类型“提取具有 X 类型值的键”的行为不符合预期

    我定义了以下泛型类型 它从类型 T 中提取值为数字的字符串键 type StringKeysMatchingNumber
  • href="tel:" 和手机号码

    如果我使用tel 我应该写国际电话代码 就像这样 a href 61709 a 到目前为止 一切都很好 但我找不到有关如何以 国际 方式书写手机号码的信息 如果有的话 拨打您所在国家 地区的号码时 您仍然需要拨打国内长途电话号码在其余数字之
  • 使用 Xampp 运行 Python 脚本

    我正在使用 python 2 7 13首先 浏览器显示原始代码 我做了什么 编辑httpd conf AddHandler cgi script cgi pl asp py 在我所有脚本的顶部我添加了以下内容 j Installeds Py
  • C# 和 LINQ:按嵌套查询的值对查询进行排序

    我正在 ASP NET 中编写一个简单的论坛 该论坛位于 C 的实体框架数据库之上 Each Topic对象具有导航属性Posts指向一个集合Post对象 每个Post对象有一个属性When这表明该帖子的发布时间 Post Parent是类
  • 如何防止winforms设计器将Text属性设置为实例名称

    在开始之前 似乎以前可能有人问过类似 相同的问题here 然而没有明确的答案 假设我有一个自定义 winforms 控件 它覆盖Text财产 public class MyControl Control DefaultValue publi
  • 使用 ASP.NET 表单身份验证的 WCF 服务

    我正在通过 jQuery ajax 从 ASP NET 页面调用 WCF Web 服务 NET 4 0 如何保护 WCF 服务的安全 以便只有经过身份验证的 ASP NET 用户才能调用该服务的方法 我是否需要在每个服务方法中强制手动检查表
  • Google AppEngine ImportError:动态模块未定义 init 函数 (init_mysql)

    当我在 Google AppEngine 上使用 Flask 部署 python 应用程序时 出现此错误 如果有人帮助我 我将不胜感激 ps 我的本地服务器工作得很好 File base data home apps s dwnup 997
  • 如何在 php 中获取会话 ID 或用户名?

    我有一个用户可以登录的网站 我尝试过
  • 带扩展名的 TypeScript 导入

    您可能听说过 Deno 它是一个新的 TypeScript 运行时 Deno 和普通 TypeScript 之间的一个主要区别是您必须在 import 语句中包含文件扩展名 例如 import foo from bar ts 我想编写与 D
  • css resize 属性 - 更改调整大小图标属性

    我有一个带有 调整大小 属性的 div 默认情况下 您只能通过拖动窗口的右下角来更改大小 我想知道是否有可能改变它的行为 例如它的外貌 size or position 具体来说 我想做的是允许用户在边缘 而不是角落 重新调整窗口的大小 类
  • mongo $slice查询反向索引超出范围

    mongo 中的以下查询表现得很奇怪 db items findOne List slice skip 3 第一的 它不是仅返回一个带有 id List 键的对象 而是返回一个完整的对象 第二 如果skip是负数并且 skip 高于 lis