MongoDB学习总结4(数据插入、修改)

数据操作前,需要先开启MongoDB服务,并建立链接。

开启服务

mongod

建立链接

mongo

数据插入

单条数据插入语法:

db.集合.insert()

批量数据插入实例:

扫描二维码关注公众号,回复: 13302703 查看本文章

demo1.js

var workmate1 = {
    name: 'zhangsan',
    age: 20,
    sex: 1,
    job: '前端',
    skill: {
        skillOne: 'HTML',
        skillTwo: 'CSS',
        skillThree: 'js'
    },
    regeditTime: new Date()
}

var workmate2 = {
    name: 'lisi',
    age: 30,
    sex: 1,
    job: '后端',
    skill: {
        skillOne: 'JAVA',
        skillTwo: 'J2EE',
        skillThree: 'ORACLE'
    },
    regeditTime: new Date()
}


var workmate3 = {
    name: 'xiaohong',
    age: 18,
    sex: 0,
    job: 'UI',
    skill: {
        skillOne: 'PS',
        skillTwo: 'AI',
        skillThree: 'PPT'
    },
    regeditTime: new Date()
}

var db = connect('company');
var workmateArr = [workmate1, workmate2, workmate3];
db.workmate.insert(workmateArr);
print('sucess');

在vscode终端中执行js文件:

1.使用mongo命令链接到数据库

 2.使用load命令直接加载js文件

 3.使用命令查询下插入的数据

 一次性就将三条记录插入到数据库中。

数据修改

实例一:把姓名为xiaohong的记录,sex改为0,age改为20,操作如下:

新建demo2.js

db.workmate.update({ name: 'xiaohong' }, { "$set": { sex: 0, age: 20 } });

在vscode终端执行 load('./demo2.js')

修改后查询下最新的数据:

 发现数据已经修改成功。

实例二:把姓名为xiaohong的记录,skillThree的值由原来的PPT改为Word。

db.workmate.update({ name: 'xiaohong' }, { $set: { "skill.skillThree": "Word" } });

执行结果:  

实例三:为姓名为xiaohong的记录,添加字段address,值为上海市。

db.workmate.update({ name: 'xiaohong' }, { $set: { address: "上海市" } });

执行结果: 

实例四:为姓名为xiaohong的记录,删除字段address。

db.workmate.update({ name: 'xiaohong' }, { $unset: { address: '' } });

执行结果: 

 可以看到address字段已经被删除了。

实例五:为姓名为xiaohong的记录,age字段值减2。

db.workmate.update({ name: 'xiaohong' }, { $inc: { age: -2 } });

执行结果:  

从结果可以看到,age由原来的20改成了18。 

实例六:为workmate集合中的所有记录添加字段address,值为上海市。

db.workmate.update({}, { $set: { address: "上海市" } }, { multi: true });

 执行结果:  

实例七:为name等于wangwu的记录,设置age等于40。

这时候因为数据库中并没有wangwu的记录,在不使用insert命令新增wangwu记录的情况下,可以使用upsert来实现不存在的记录新增的操作。

db.workmate.update({ name: "wangwu" }, { $set: { age: 40 } }, { upsert: true });

执行结果:

 可以看到新增了一条name为wangwu的记录,age字段值为40

实例八:为name等于wangwu的记录,添加兴趣爱好字段(interest),值为画画(draw)。

db.workmate.update({ name: "wangwu" }, { $push: { interest: 'draw' } });

执行结果:

 使用push方法可以往数组中添加元素。

实例九:为name等于wangwu的记录,兴趣爱好字段(interest),添加值(read)。要求:如果interest中不存在read元素,则添加。存在则不添加。

db.workmate.update({ name: "wangwu" }, { $addToSet: { interest: 'read' } });

执行结果:

可以看到第一次执行的时候,interest数组中不存在read元素,所以新加进去了,第二次执行时,因为已经存在了,所以并没有重复添加。addToSet可以轻松实现添加前判断的功能。

实例十:为name等于wangwu的记录,兴趣爱好字段(interest),添加多个值。要求:如果interest中不存在的元素,则添加。存在则不添加。

var newArr = ["Sing", "Dance", "Code"];

db.workmate.update({ name: "wangwu" }, { $addToSet: { interest: { $each: newArr } } });

 执行结果:

 

可以看到一次性将三个元素同时插入都interest数组中。$each 实现批量追加功能。

实例十一:为name等于wangwu的记录,兴趣爱好字段(interest),删除Code元素。

db.workmate.update({ name: 'wangwu' }, { $pop: { interest: 1 } });

 执行结果:

 $pop只删除一次,并不是删除所有数组中的值。而且它有两个选项,一个是1和-1。

1:从数组末端进行删除

-1:从数组开端进行删除

实例十二:为name等于wangwu的记录,兴趣爱好字段(interest),Sing元素修改为Sport。

db.workmate.update({ name: 'wangwu' }, { $set: { "interest.1": "Sport" } });

  执行结果:

 有时候只知道修改数组的第几位,但并不知道是什么,这时候我们可以使用 字段名称.元素下标 的形式。注意下标从0开始。

db.runCommand()的使用:

在上面的实例中,当执行修改操作后,并不知道是否执行成功。数据库并没有返回执行结果。如果想在语句执行后的到数据库返回的结果,可以使用db.runCommand()来接收数据库返回的信息。

它是数据库运行命令的执行器,执行命令首选就要使用它,因为它在Shell和驱动程序间提供了一致的接口。(几乎操作数据库的所有操作,都可以使用runCommand来执行)现在我们试着用runCommand来修改数据库,看看结果和直接用db.collections.update有什么不同。

实例十三:为sex等于1的记录,添加money,值为1000。

db.workmate.update({ sex: 1 }, { $set: { money: 1000 } }, false, true);

var resultMsg = db.runCommand({ getLastError: 1 });

printjson(resultMsg);

false:第一句末尾的false是upsert的简写,代表不符合条件sex=1时不增加;

true:第一句末尾的true是multi的简写,代表修改所有符合条件的记录。

getLastError:1 :表示返回功能错误,这里的参数很多,可以通过db.listCommands()查看所有的Commad命令。

printjson:表示以json对象的格式输出到控制台。

执行结果:

可以看到本次执行后,打印了很多信息。在实际应用场景中可以根据这些返回的结果进行其他的逻辑处理。

查询下执行后的数据情况:

只有sex值为1的记录,才增加了 money: 1000 的数据。

findAndModify:

从名字上就可以看出,findAndModify是查找并修改的意思。配置它可以在修改后给我们返回修改的结果。通过下面的实例感受下用法。

实例十四:为name等于wangwu的记录,修改年龄为33,并返回修改后的记录。

var myMidify = {

    findAndModify: "workmate",

    query: { name: "wangwu" },

    update: { $set: { age: 33 } },

    new: true

}

var resultMsg = db.runCommand(myMidify);

printjson(resultMsg);

执行结果:

可以看到age被修改为33,并返回了name等于wangwu的所有信息。

findAndModify属性值:

query:需要查询的条件/文档

sort: 进行排序

remove:[boolean] 是否删除查找到的文档,值填写true,可以删除

update:更新的字段和值。(remove和update不能同时存在)

new:[boolean] 返回更新前的文档还是更新后的文档

fields:需要返回的字段,默认返回全部字段

upsert:没有这个值是否增加

猜你喜欢

转载自blog.csdn.net/liangmengbk/article/details/119837790
今日推荐