MongoDB文档的更新(php代码实例)


mongodb更新文档分为两大类:

  • 文档替换,使用新文档完全替换掉旧文档

  • 修改器,修改部分文档

文档替换

使用文档替换非常的简单,下面来看演示:

$collect->insertOne(['name' => 'lakers', 'nums'=> 16]);
$collect->replaceOne(
    ['name'=>'lakers'], 
    ['name' => 'heat', 'nums'=>3]
);

使用修改器可以完成更复杂的更新操作,比如修改、增加或删除键。

"$set"修改器

"$set"用来指定一个字段的值。如果这个字段不存在,则创建它。

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
]);

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'apple']]
);
// fruit字段不存在,则会创建该字段

如果现在不喜欢apple,想换成草莓

$collect->updateOne(['name'=>'james'],
    ['$set' => ['fruit' => 'strawberry']]
);

"$set"还可以修改键的类型。

# 不止喜欢草莓,还喜欢梨子、香蕉。
$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['fruit' => 
            ['strawberry', 'banana', 'pear'] 
        ]
    ]
);

"$set"也可以修改内嵌文档

$collect->insertOne([
    'name' => 'james',
    'age' => 35,
    'brothers' => ['name' => 'wade', 'age'=> 38]
]);

$collect->updateOne(['name'=>'james'],
    ['$set' =>
        ['brothers.name' => 'paul']
    ]
);

"$unset"修改器

使用"$unset"修改器可以删除指定字段

$collect->updateOne(['name'=>'james'],
    ['$unset' =>
        ['brothers' => '']
    ]
);

"$inc"修改器,增加或减少数值

和"$set"修改器一样,如果该字段不存在则自动创建。注意:该字段值只可以是数字。

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 61]
    ]
);
## 现有积分61

现在,有获得了10点积分。

$collect->updateOne(['name'=>'james'],
    ['$inc' =>
        ['scores' => 10]
    ]
);
## 现有积分71

后来,用掉了50积分

$collect->updateOne(['name'=>'james'],
     ['$inc' =>['scores' => -50]
 ] ); 
 ## 现有积分21

数组修改器

MongoDB针对数组提供了专门的修改方法。

"$push"添加元素

"$push"可以往数组里添加元素,如果该数组不存在,则会自动创建数组。现在有一个文档用于保存文章数据:

$collect->insertOne([
     '_id' => 1,      
     'title'=>'study mongodb',      
     'create_time' => '2025-08-24 12 :31' 
]); 
$push = ['$push' => ['comments' => 'comments1'] ]; 
$collect->updateOne(['_id' => 1 ], $push);

"$each"添加多个元素

国洋商务通 国洋商务通

Gyb2b V1.01免费版可终身使用,是一款功能强大的B2B电子商务应用软件。该软件不仅更新和修改了V1.0相关功能,更是采用了目前互联网上最流行的LAMP组合(Linux+Apache+Mysql+PHP)开发完成,模板技术实现了界面与代码的有效分离,用户可以快速地在此基础上编译模板;提供B2B电子商务应用最常见的求购、供应、商品、公司库、行业资讯、商圈、资信认证、在线交易、交易评分、留言、搜

国洋商务通 0 查看详情 国洋商务通

'$push'可以一次数组元素,如果想一次添加多个元素的话,则需要搭配使用'$each'。

$push = [    
     '$push' => 
         ['comments' => 
             ['$each' => ['comment1', 'comment2', 'comment3']]
         ] 
      ]; 
$collect->updateOne(['_id' => 1 ], $push);

"$slice"保留n个元素

'$push'和'$slicet'配合使用,保留最新的n条数据,'$slice'的值只能是负整数。比如,我只想保留最新的3条评论:

# 目前数据如下
 > db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2025-08-24 12:31", "comment" : [ "comment1", "comment2", "comment3", "comment4", "comment5", "comment6" ] }
$push = [
     '$push' => [ 
        'comment' => [ 
            '$each' => ['comment7', 'comment8', 'comment9'],                                '$slice' => -3 
        ],
     ], 
]; 
$collect->updateOne(['_id' => 1 ], $push);
# 现数据如下 
db.users.find() 
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2025-08-24 12:31", "comment" : [ "comment7", "comment8", "comment9" ] }

"$sort"排序

还可以配合'$sort'使用,保留点赞数最多的3条评论。

# 目前是集合内是空的,么有任何文档
$collect->insertOne(['_id' => 1, 'title'=>'study mongodb', 'create_time' => '2025-08-24 12:31']);
$push = [
    '$push' => [
        'comment' => [
            '$each' => [
                ['comment' => 'php', 'like' => 100], 
                ['comment' => 'mysql', 'like' => 10], 
                ['comment' => 'linux', 'like' => 200], 
                ['comment' => 'j*a', 'like' => 1000], 
                ['comment' => 'nginx', 'like' => 300], 
                ['comment' => 'composer', 'like' => 500], 
            ],
            '$slice' => -3,
            '$sort' => ['like' => 1]
        ],
    ],
];

再来看看集合内数据是怎样的:

> db.users.find()
{ "_id" : 1, "title" : "study mongodb", "create_time" : "2025-08-24 12:31", "comment" : [ { "comment" : "nginx", "like" : 300 }, { "comment" : "composer", "like" : 500 }, { "comment" : "j*a", "like" : 1000 } ] }

注意不能只将 "$slice" 或者 "$sort" 与 "$push" 配合使用,且必须使用 "$each"。

"$addToSet"避免插入重复数据

使用"$addToSet"新增数组元素时,可以避免添加重复数据,比如

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

$update = [
    '$addToSet' => [
        'fruits' => 'apple'
    ]
];

上面的修改不会成功,因为apple已经存在。'$addToSet'也可以和"$each"配合使用,插入多个数组元素。

$update = [
    '$addToSet' => [
        'fruits' => [
            '$each' => ['apple', 'banana', 'orange']
        ]
    ]
];
$collect->updateOne(['_id' => 1], $update);

删除元素

可以通过"$pop",删除最左端或最右端的元素。

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear']
]);

#从数组末删除1个元素
$update = [
    '$pop' => [
        'fruits' => 1
    ]
];
$collect->updateOne(['_id' => 1], $update);

# 从数组头删除一个元素
$update = [
    '$pop' => [
        'fruits' => -1
    ]
];
$collect->updateOne(['_id' => 1], $update);

还可以通过'$pull'删除指定的元素

$collect->insertOne([
    '_id' => 1,
    'name' => 'gwx', 
    'age' => 30, 
    'fruits' => ['apple', 'pear', 'apple', 'banana', 'orange']
]);

#从数组末删除
$update = [
    '$pull' => [
        'fruits' => 'apple'
    ]
];

数组有所有apple元素都被删除了

upsert

upsert是一种特殊的更新。但找到符合条件的集合,那么和之前的修改时一样的。若没有找到符合条件的集合,那么它就会以查询条件以及修改的文档作为一个新文档插入到集合中。

下面,以一个我们经常碰到的场景来举例——记录每个ip浏览的次数。若是新的ip,则新增到集合中,若已存在,就修改原有集合。

$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);

$collect->updateOne(['ip' => '127.0.0.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);


$collect->updateOne(['ip' => '116.31.23.1'], [
    '$inc' =>[
        'views' => 1
    ]
], ['upsert' => true]);
> db.users.find()
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2df"), "ip" : "116.31.23.1", "views" : 2 }
{ "_id" : ObjectId("5f4336f3a95f1a505db9a2e1"), "ip" : "127.0.0.1", "views" : 1 }

更新多个文档

更新多个文档需要使用updateMany()方法,演示如下:

$collect->insertMany([
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
    ['name' => 'gwx', 'age' => 30],
]);

$collect->updateMany([
    'name' => 'gwx'
],
    ['$set' =>['age' => 18]]
);

以上就是MongoDB文档的更新(php代码实例)的详细内容,更多请关注其它相关文章!


# 文档  # 修改器  # 多个  # 不存在  # 还可以  # 连接池  # 长时间  # 新和  # 则会  # MongoDB  # 昌吉精准营销推广  # 宁河区营销推广软件公司  # 优质seo网址优化推广公司  # 承德模板网站建设价格  # seo seung jae  # 健身房营销推广费用计入  # 浙江网站建设如何  # seo加速外链收录  # 光泽公司seo联系方式  # 网站推广流量宝安全吗可靠吗  # 符合条件 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: Python类装饰器动态修改方法时的类型提示:Mypy插件实现精确静态分析  PHP动态导航按钮:根据用户登录状态切换链接与文本  PySimpleGUI中实现键盘按键与按钮事件绑定教程  Python模块化编程:避免循环导入与共享函数的最佳实践  汽水音乐网页端访问 汽水音乐官方网页直达  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  《大学搜题酱》官网地址登录  泰拉瑞亚水晶无法放置问题  Excel宏怎么删除_Excel中删除宏的详细操作流程  Lar*el Eloquent:高效删除多对多关系中无关联子记录的父模型  mysql触发器如何编写_mysql触发器编写规范与代码示例讲解  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  除了Copilot,还有哪些值得一试的VS Code AI插件?  圆通快递包裹轨迹查询 圆通速递快件实时位置跟踪  键盘声音异常怎么回事_键盘异响怎么处理  《偃武》甘宁技能详解  Win11怎么开启HDR_Windows 11显示器画质增强设置  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  胃动力不足?试试这5个调理方法  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  招商淘客入门指南  动漫之家观看全集库 动漫之家免费资源网地址  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  Win11怎么设置分辨率 Win11显示设置调整分辨率及刷新率修改  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  J*aScript与CSS动画:实现平滑顺序淡入淡出效果并解决显示冲突  暴风影音官网正式版_暴风影音手机版官网下载安卓  mysql怎么导入sql文件_mysql导入sql文件的方法与技巧  Python实时数据流中高效查找最大最小值  cad怎么隐藏指定的图层_cad隐藏或冻结图层方法  支付宝网页版在线入口 支付宝官网电脑登录入口  Python高效统计字典嵌套列表值在目标列表中的出现次数  mysql中如何配置字符集和排序规则_mysql字符集排序配置  电脑视频号|直播|如何分享屏幕  163邮箱网页版官方登录入口 163邮箱网页版访问页面  《爱笔思画x》魔棒工具抠图教程  HTML中多图片上传与预览:解决ID冲突的专业指南  冬季去寒冷地区旅游,以下哪种做法有助于缓解冻伤  《新三国志曹操传》游历事件袁尚突围攻略  盲鳗善于分泌黏液猜猜主要用来做什么  iPhone12是否要更新ios16  免费占卜在线神算_免费占卜手机神算  sublime如何处理超大文件不卡顿 _sublime打开大日志文件技巧  《procreate》绘制渐变效果教程  WooCommerce 购物车:始终显示所有交叉销售商品  PHP与SQL实践:高效实现数据复制与特定列值修改  重返未来:1999卡戎全方位攻略  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  C++ static关键字作用_C++静态成员变量与静态函数  《百果园》充值余额方法 

 2020-08-24

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.