MongoDB:更新子数组的属性仅更新第一个元素

2024-04-01

匹配元素如下所示:

{
    "_id": {
        "$oid": "519ebd1cef1fce06f90e3157"
    },
    "from": "Tester2",
    "to": "Tester",
    "messages": [
        {
            "username": "Tester2",
            "message": "heeey",
            "read": false
        },
        {
            "username": "Tester",
            "message": "hi!",
            "read": false
        },
        {
            "username": "Tester2",
            "message": "test",
            "read": false
        }
    ],
}

现在我尝试设置read属性为用户名不等于的子元素的当前日期Tester:

var messages = db.collection('messages');
messages.update(
{
    _id: new BSON.ObjectID("519ebd1cef1fce06f90e3157"),
    messages: {
        $elemMatch: { username: { $ne: "Tester" } }
    }
},
{ $set: { 'messages.$.read': new Date() } },
{ multi: true }, function(error, result) {
    console.log(error);
    console.log(result);
});

但只是第一个消息子元素read属性更新:

{
    "_id": {
        "$oid": "519ebd1cef1fce06f90e3157"
    },
    "from": "Tester2",
    "to": "Tester",
    "messages": [
        {
            "username": "Tester2",
            "message": "heeey",
            "read":  {
                "$date": "2013-01-01T00:00:00.000Z"
            }
        },
        {
            "username": "Tester",
            "message": "hi!",
            "read": false
        },
        {
            "username": "Tester2",
            "message": "test",
            "read": false
        }
    ],
}

代码有什么问题吗? 我正在使用 node.js v0.10.8 和 MongoDB v2.4.3 以及节点 mongodb-native https://github.com/mongodb/node-mongodb-native.


你的代码没有任何问题;这$操作员 http://docs.mongodb.org/manual/reference/operator/positional/#op._S_包含的索引first匹配数组元素。这{multi: true}选项仅使update适用于多个文档,而不是数组元素。更新单个数组中的多个元素update您必须通过数字索引指定它们。

所以你必须做这样的事情:

messages.update(    
    {
        _id: new BSON.ObjectID("519ebd1cef1fce06f90e3157")
    },
    { $set: { 
        'messages.0.read': new Date(),
        'messages.2.read': new Date()
    } },
    function (err, result) { ... }
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB:更新子数组的属性仅更新第一个元素 的相关文章

随机推荐

  • JoinQueryOver 和 JoinAlias 有什么区别?

    我需要知道 JoinQueryOver 和 JoinAlias 之间有什么区别 以及何时使用它们 从功能上来说 它们做同样的事情 创建与另一个实体的连接 唯一的区别是它们返回的内容 JoinQueryOver 返回一个新的 QueryOve
  • Java 整数比较两个整数时返回奇怪的结果?

    Integer i1 new Integer 9 Integer i2 new Integer 9 if i1 i2 System out println true else System out println false int i3
  • Rails 3 中的移动风格切换,辅助方法与媒体查询

    我正在研究为移动应用设计 Rails 应用程序样式的方法 这个想法很常见 为移动浏览器使用一组样式 为传统浏览器使用另一组样式 据我所知 Rails 中有两种基本方法可以做到这一点 使用辅助方法来检测用户代理 然后执行切换 应用程序控制器
  • Stackdriver Logging API 返回响应代码 200,但响应为空

    我正在尝试通过 Stackdriver Logging API v2 获取 stackdriver 日志 我通过从 google apps 脚本项目发出 POST 请求来实现此目的 特别是使用 UrlFetchApp 问题是 它运行成功 但
  • 在 AWS ebextensions 中执行命令

    我在尝试在 aws elasticbeanstalk 中上传实例时收到以下错误 The configuration file ebextensions setup config in application version t5 conta
  • ViewGroupOverlay 不显示视图

    我目前正在尝试创建一个益智游戏 其中有一个网格 每个单元格应该能够在触摸时显示视觉 并且仅视觉 指示 因此 我打算使用视图组叠加 https developer android com reference android view View
  • 如何使用 State Hook 在 React 中编写语义 UI 单选组?

    我正在尝试使用 React 中的 Semantic UI 编写一个单选按钮组 我可以在以下位置获取无线电组示例广播页面 https react semantic ui com addons radio 语义 UI 的工作 它是通过扩展来写的
  • Android,从文件计算 SHA-1 哈希,最快的算法

    我在 Android 上遇到 SHA 1 性能问题 在 C 中 我在大约 3 秒内计算出哈希值 在 Android 中进行相同的计算大约需要 75 秒 我认为问题出在从文件读取操作中 但我不确定如何提高性能 这是我的哈希生成方法 priva
  • 索引的最大大小/文档数量是多少 - 32 位操作系统上的 java lucene 3.0.2

    我正在使用 lucene 和 40GB 的数据 500M 的元组 2 个字段的行为类似于键值 我创建了一个 35 GB 的索引 但它不起作用 因此 我想创建一组较小的索引 但为此 我需要有关最大尺寸的信息 你使用什么文件系统 您绝对确定已创
  • 如何使用 XCTest 测试 staticTexts 是否包含字符串

    在 Xcode UI 测试中 如何测试 staticTexts 是否包含字符串 在调试器中 我可以运行类似的命令来打印出 staticTexts 的所有内容 po app staticTexts 但是如何测试所有内容中的任何位置是否存在字符
  • 创建一个简单的计时器来计算秒、分钟和小时

    我正在尝试创建一个非常简单的程序 基本上是一个计时器 我有三套标签 lbl seconds lbl minutes and lbl hours 这些标签的默认值为00 00我希望计时器为每个标签更改它 我已经用谷歌搜索过这个 但我似乎找不到
  • Cocoa 中的手动绑定

    我有一个 ImageView 显示一个锁 通知打开的文件是否被锁定 我有 2 张锁定和解锁案例的图像 我想将显示的图像与代表打开文件的对象的布尔值同步 为此 我希望 ViewController 根据对象的锁定状态更改 ImageView
  • 如何将 pyspark 数据框保存在单个 csv 文件中

    这是这个的延续如何将数据帧保存到 csv pyspark https stackoverflow com questions 60498321 how to save dataframe into csv pyspark thread 我正
  • 查询以选择两个日期之间的数据,格式为 m/d/yyyy

    当我尝试从两个日期之间的表中选择记录时 我遇到了问题 m 使用以下查询 select from xxx where dates between 10 10 2012 and 10 12 2012 这个查询对我有用 但是当日期的格式如 1 1
  • React 的 Webpack 错误

    我正在尝试根据此配置 webpacktutorial https robots thoughtbot com setting up webpack for react and hot module replacement并不断收到相同的错误
  • 如何在编码时阻止自己覆盖 Python 函数?

    在追踪 Python 代码中的错误时 经常令人头疼的一个问题是看似无害的代码片段 如下所示 list a b c c list set list 这失败了 因为我用变量列表覆盖了函数 list 显然是一个人为的例子 但重点是 Python
  • AWS 上的 Node JS“Hello world”服务器

    我尝试在 AWS t1 micro 实例上运行 Hello world 服务器 我做了什么 我在aws上安装了Node 写了这样的东西 require http createServer function request response
  • 在 html2pdf 中使用 css 浮动

    我使用 float 将 2 个 div 放置在彼此旁边 a href printbox php print a
  • Excel countif vba 代码,其中包含产生值的条件

    我不确定我想要实现的目标是否可能 所以这里是 我有 2 张工作簿 第一张表包含员工的原始数据以及他们参加或未参加的培训 他们无法参加培训 工作表包含几列 例如 姓名 特殊 ID 每个员工都不同 2 个空白列 存在 是 否 以及更多 第二张表
  • MongoDB:更新子数组的属性仅更新第一个元素

    匹配元素如下所示 id oid 519ebd1cef1fce06f90e3157 from Tester2 to Tester messages username Tester2 message heeey read false usern