iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB 更新的简单使用
  • 485
分享到

MongoDB 更新的简单使用

2024-04-02 19:04:59 485人浏览 泡泡鱼
摘要

update 函数似乎比insert,remove跟find难用一点,原因参数多了。不过简单的写一些比较少用的技巧,普通更新一般比较简单。关于$inc操作:    属

update 函数似乎比insert,remove跟find难用一点,原因参数多了。

不过简单的写一些比较少用的技巧,普通更新一般比较简单。


关于$inc操作:

    属于原子操作,可以整型,长整型或浮点数进行增加操作,如下:

> test={
... "name":"Mike",
... "friends":32,
... "enemies":2,
... "Balance":155.6
... }
{ "name" : "Mike", "friends" : 32, "enemies" : 2, "Balance" : 155.6 }
> db.updatetest.insert(test)
WriteResult({ "nInserted" : 1 })
> db.updatetest.update({"name":"Mike"},{"$inc":{"Balance":5.4}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.updatetest.find()
{ "_id" : ObjectId("5625ab9b16a7b138cf6bf46f"), "name" : "Mike", "friends" : 32, "enemies" : 2, "Balance" : 161 }


关于$set操作:

    对存在的文档指定一个字段值,如果该字段不存在则创建它,如下:

test={    "name":"Mike",    "age":32,    "sex":"male",    "location":"China"}
> db.updatetest.insert(test)
WriteResult({ "nInserted" : 1 })
> db.updatetest.find()
{ "_id" : ObjectId("5625ae7616a7b138cf6bf471"), "name" : "Mike", "age" : 32, "sex" : "male", "location" : "China" }



增加亲属关系:

> relatives={"Wife":"May","Father":"Joe","Mother":"Jojo"}
{ "Wife" : "May", "Father" : "Joe", "Mother" : "Jojo" }
> db.updatetest.update({"_id":ObjectId("5625ae7616a7b138cf6bf471")}, {"$set":{"relatives":relatives}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.updatetest.find()
{ "_id" : ObjectId("5625ae7616a7b138cf6bf471"), "name" : "Mike", "age" : 32, "sex" : "male", "location" : "China", "relatives" : { "Wife" : "May", "Father" : "Joe", "Mother" : "Jojo" } }



利用update操作数组:

    $push可以对已有的文档中的数组尾部加入一个元素,如果没有就直接创建一个新数组,如下:

people={    "title":"mail list",    "Phone":"010-123456"}
> db.updatetest.insert(people)
WriteResult({ "nInserted" : 1 })
db.updatetest.update({"title":"mail list"},  {"$push":{"emails":"test@123.com"}})
db.updatetest.update({"title":"mail list"}, {"$push":{"emails":"test@123.com"}})          
     > db.updatetest.find()
{ "_id" : ObjectId("5625ae7616a7b138cf6bf471"), "name" : "Mike", "age" : 32, "sex" : "male", "location" : "China", "relatives" : { "Wife" : "May", "Father" : "Joe", "Mother" : "Jojo" } }
{ "_id" : ObjectId("5625b11216a7b138cf6bf472"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test@123.com", "test@123.com" ] }


$push是允许重复插入记录的。


$push还允许与slice,sort,each一起使用,如下:

db.updatetest.update({"title":"mail list"}, {"$push":{"emails":{$each:["test1@123.com","test2@124.com","test3@125.com"]}}}) 
> db.updatetest.find()
{ "_id" : ObjectId("5625b2ba16a7b138cf6bf473"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test@123.com", "test@123.com", "test1@123.com", "test2@124.com", "test3@125.com" ] }



与$slice一起使用:

> db.updatetest.update({"title":"mail list"},{$push:{"top10":{"$each":["KFC","mcdonalds","pizzahut"],"$slice":-3}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

没有top10这个键的时候会自动创建一个

> db.updatetest.find()
{ "_id" : ObjectId("5625b44d16a7b138cf6bf474"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test1@123.com", "test2@124.com", "test3@125.com" ], "top10" : [ "KFC", "mcdonalds", "pizzahut" ] }

现在top10这个数组刚刚好有3个元素,再次插入两个,则只保留最后三个

> db.updatetest.update({"title":"mail list"},{$push:{"top10":{"$each":["starbucks","illy"],"$slice":-3}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.updatetest.find()
{ "_id" : ObjectId("5625b44d16a7b138cf6bf474"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test1@123.com", "test2@124.com", "test3@125.com" ], "top10" : [ "pizzahut", "starbucks", "illy" ] }


对于$push是可以插入重复数据,如果邮件地址已经存在不想再重复插入,则可以使用$addToSet操作,如下:

> db.updatetest.update({"title":"mail list"},... {"$addToSet":{"emails":"test1@123.com"}... })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })> db.updatetest.find()
{ "_id" : ObjectId("5625b44d16a7b138cf6bf474"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test1@123.com", "test2@124.com", "test3@125.com" ], "top10" : [ "HP", "DELL", "MicroSoft" ] }> db.updatetest.update({"title":"mail list"}, {"$addToSet":{"emails":{$each:["test1@123.com","abc@321.com","new@newaddress.com","abc@321.com"]}} })
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.updatetest.find()
{ "_id" : ObjectId("5625b44d16a7b138cf6bf474"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test1@123.com", "test2@124.com", "test3@125.com", "abc@321.com", "new@newaddress.com" ], "top10" : [ "HP", "DELL", "MicroSoft" ] }


基于位置的数组修改:

由一个内嵌文档组成的数组,内容如下:

        > db.updatetest.insert({
...
... "content":"mongoDB Update",
... "comments":[
... {
... "comment":"Good post",
... "author":"John",
... "votes":0
... },
... {
... "comment":"too short",
... "author":"mike",
... "votes":3
... },
... {
... "comment":"free watches",
... "author":"Alice",
... "votes":-1
... }
... ]
...
... })

WriteResult({ "nInserted" : 1 })
可以通过$符号来作为定位符,修改comments里面的键,例如修改comments.comment.author 这个键想把Alice改为May操作如下:

> db.updatetest.update({"comments.author":"Alice"},{"$set":{"comments.$.author":"May"}})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.updatetest.find()
{ "_id" : ObjectId("5625b44d16a7b138cf6bf474"), "title" : "mail list", "Phone" : "010-123456", "emails" : [ "test1@123.com", "test2@124.com", "test3@125.com", "abc@321.com", "new@newaddress.com" ], "top10" : [ "HP", "DELL", "MicroSoft" ] }
{ "_id" : ObjectId("5625bbef16a7b138cf6bf475"), "content" : "Mongodb Update", "comments" : [ { "comment" : "Good post", "author" : "John", "votes" : 0 }, { "comment" : "too short", "author" : "mike", "votes" : 3 }, { "comment" : "free watches", "author" : "May", "votes" : -1 } ] }



最后一个是findAndModify操作:

    该操作可以返回更新前的文档

如下:

> dc=db.runCommand({"findAndModify":"updatetest",
... "query":{"title":"mail list"},
... "sort":{"_id":-1},
... "update":{"$set":{"company":"QQ"}}})
> dc.value
{
    "_id" : ObjectId("5625b44d16a7b138cf6bf474"),
    "title" : "mail list",
    "Phone" : "010-123456",
    "emails" : [
        "test1@123.com",
        "test2@124.com",
        "test3@125.com",
        "abc@321.com",
        "new@newaddress.com"
    ],
    "top10" : [
        "HP",
        "DELL",
        "MicroSoft"
    ]
}

关于findAndModify操作在update位置的参数可以使用remove,表示匹配query则删除该文档。

还有new,表示返回更新前的文档还是更新后的文档,默认是更新前的。

fields 文档中需要返回的字段(可选)

upsert 布尔值,true表示是一个upsert,默认为false

或者可以这样操作:

> db.updatetest.findAndModify({query:{"title":"mail list"}, update:{$set:{"company":"BBC"}}, new:true, sort:{"_id":-1}, fields:{"emails":1}, upsert:true})


{
    "_id" : ObjectId("5625b44d16a7b138cf6bf474"),
    "emails" : [
        "test1@123.com",
        "test2@124.com",
        "test3@125.com",
        "abc@321.com",
        "new@newaddress.com"
    ]
}
该条语句修改了company为bbc,然后返回字段是emails,new是表示返回更新后的数据.

您可能感兴趣的文档:

--结束END--

本文标题: MongoDB 更新的简单使用

本文链接: https://www.lsjlt.com/news/41900.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用MyBatis进行简单的更新与查询方式
    目录MyBatis增删改查的用法sql映射文件myBatis框架的缓存myBatis框架的新增myBatis框架的更新     myBatis...
    99+
    2022-11-13
    MyBatis更新 MyBatis查询 MyBatis更新与查询
  • 使系统操作更简单 使用Vista新增命令
     第二电脑网导读:了其他的一些新的命令、快捷操作方式,在此做一详细列表,希望能帮助朋友们提高在Windows Vista中的操作与管理效率。  Windows Vista中的新增命令(以字母顺序排序) :  A...
    99+
    2023-05-26
    Vista命令 系统 命令 Vista
  • c# 如何更简单的使用Polly
    目录如何实现简化呢? 当然,一些常见的方法已经封装在了 Norns.Urd.Extensions.Polly 如何启用 Norns.Urd + Polly, 只需使用EnablePo...
    99+
    2024-04-02
  • 用python做oj上的简单题(持续更新
    本人刚开始接触python,在oj上解一些简单的题,欢迎交流,不喜勿喷. OJ地址链接:acm.sdut.edu.cn http://acm.sdut.edu.cn/sdutoj/showproblem.phppid=1110&...
    99+
    2023-01-31
    简单 python oj
  • MongoDB orm框架的注意事项及简单使用
    目录Ⅰ. 简介 Ⅱ. 注意事项 Ⅲ. 使用方法 Ⅳ. 教程 首先spring自带了mongodb的orm,spring data mongodb,但是这个框架非常难用,最令人抓狂的是...
    99+
    2024-04-02
  • 如何使用MongoDB开发一个简单的 CRUD API
    如何使用MongoDB开发一个简单的CRUD API在现代的Web应用程序开发中,CRUD(增删改查)操作是非常常见和重要的功能之一。在本文中,我们将介绍如何使用MongoDB数据库开发一个简单的CRUD API,并提供具体的代码示例。Mo...
    99+
    2023-10-22
    API MongoDB CRUD
  • 如何使用Vista新增命令让系统操作更简单
    今天就跟大家聊聊有关如何使用Vista新增命令让系统操作更简单,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 第二电脑网导读:了其他的一些新的命令、快捷操作方式,在此做一详...
    99+
    2023-06-14
  • 更简单更高效的MybatisPlus最新代码生成器AutoGenerator
    目录正文一、概述二、使用AutoGenerator1. 初始化数据库表结构(以User用户表为例)2. 在 pom.xml 文件中添加 AutoGenerator 的依赖。3. 添加...
    99+
    2023-02-10
    Mybatis Plus代码生成器 Mybatis Plus AutoGenerator
  • Redis缓存更新一致性的简单介绍
    这篇文章主要介绍“Redis缓存更新一致性的简单介绍”,在日常操作中,相信很多人在Redis缓存更新一致性的简单介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Redis缓...
    99+
    2024-04-02
  • 简单教程:如何更新Python的pip工具
    Python升级pip的简易教程,需要具体代码示例 一、背景说明在使用Python进行开发过程中,我们经常使用pip来安装、升级和管理第三方库。pip是Python的一个包管理器,用于下载和安装Python包或库,为我们提供了便...
    99+
    2024-01-18
  • MongoDB中怎么使用Save()方法更新文档
    这篇文章将为大家详细讲解有关MongoDB中怎么使用Save()方法更新文档,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在MongoDB中,可以对操作的文档进行操作,例如如何在数据库中存在了该内容,这部...
    99+
    2023-06-14
  • 简单聊一聊Vue3组件更新过程
    目录前言副作用渲染函数更新组件的过程核心逻辑:patch流程1.处理组件2.处理普通元素总结前言 组件渲染的过程,本质上就是把各种把各种类型的 vnode 渲染成真实 DOM。我们也...
    99+
    2024-04-02
  • Java新手学习之IO流的简单使用
    目录前言IO流1、基本概念 2、IO流分类 3、File3.1File基本概念3.2创建文本3.3创建目录3.4判断、读取和删除4、字节流 4.1字节流...
    99+
    2024-04-02
  • scrapy的简单使用
    使用之前的创建虚拟环境方法(pipenv) 创建虚拟环境并进入虚拟环境 mkdir douban cd douban pipenv install pipenv shell 再安装我们的scrapy pipenv install s...
    99+
    2023-01-30
    简单 scrapy
  • MongoDB mongoexport工具的使用简介
    目录01  基本介绍02  常用参数03  命令04  经验值05  反向导入01  基本介绍   ...
    99+
    2024-04-02
  • NFS的简单使用
    在NFS服务器建一个目录,用来存共享文件,提供NFS磁盘空间[root@PROD2 ~]# mkdir -p /u01/nfs_shares[root@PROD2 ~]# ll /u01总用量 8drwxr...
    99+
    2024-04-02
  • pymongo的简单使用
    pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client = pymongo.MongoCli...
    99+
    2023-01-31
    简单 pymongo
  • 怎么在MongoDB中使用update()方法更新文档
    怎么在MongoDB中使用update()方法更新文档?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、update()命令db.collection.update(&nb...
    99+
    2023-06-14
  • 如何更新 MongoDB 文档的 _id?
    您无法更新它,但可以保存新 ID 并删除旧 ID。请按照一些步骤更新 MongoDB 的 _id。步骤如下:第1步:第一步,需要将ObjectId存储到变量中。anyVariableName=db.yourCollectionName.fi...
    99+
    2023-10-22
  • 如何使用MongoDB开发一个简单的区块链系统
    如何使用MongoDB开发一个简单的区块链系统区块链技术近年来备受关注,因其去中心化、安全性高等特点,被广泛用于加密货币、合约管理等领域。本文将介绍如何使用MongoDB开发一个简单的区块链系统,并提供相应的代码示例。1.安装和配置Mong...
    99+
    2023-10-22
    开发 区块链 MongoDB
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作