499689317 / notes

note
2 stars 0 forks source link

mongodb #11

Open 499689317 opened 7 years ago

499689317 commented 7 years ago

mongodb

insert方法: insert操作是MongoDB插入数据的基本方法,对目标集合使用insert操作,会将该文档添加到MongoDB并自动生成相应的ID键。文档结构采用类似JSON的BSON格式。常见的插入操作主要有单条插入和批量插入两种形式。插入时只是简单地将文档存入数据库中,不进行额外的验证,也不会执行代码,所以不存在注入式攻击的可能。

MongoDB对批量插入的支持是通过传递多个文档组成的数组到数据库来实现的。由于它插入数据是通过发送TCP请求的,这样只需发送单个TCP请求,且数据库无需处理大量的消息头,减少插入时间。这种方式的批量插入一次只能将多个文档插入到一个集合中,对于插入到多个集合可以循环调用insert操作

save方法: db.collection.save({插入字段: 值} ); 插入数据会对比"_id"字段,如果相同会替换覆盖,如果"_id"不同则会插入,如果没有"_id"系统会自动生成一个"_id"再插入

"_id": 这个字段是数据库默认给我们加的GUID,目的就是保证数据的唯一性

remove方法: remove函数可以用来删除数据,它能接受一个文档作为可选参数,只有符合条件的文档才会被删除。删除数据是永久性的,不能撤销,也不能恢复,需要谨慎。删除文档需要清空整个集合,不如直接删除集合快。

db.collection.remove({"移除字段": 1});// 删除指定字段数据 db.collection.remove();// 删除整个表数据

update方法: update函数用于修改数据库中的数据,它接收两个参数,一个是查询文档,用来查找要更新的文档,另一个是修改器文档,用来描述对找到的文档做哪些修改。更新操作是原子性的,如果多个更新同时发生,则所有的更新都会执行,但最后的更新是最终赢家。

db.collection.update({条件字段: 值}, {更新字段: 值}, upsert, nulti); upsert: 不存在update记录则插入,默认为false nulti: ture按条件查出多条记录全部更新,false只更新查到第一条记录

更新对象内的修改器:

局部更新(修改器) 部分更新是通过原子的更新修改器实现的,使用修改器时除了”_id“的值不能改变,其他任何值都能改变。文档替换是可以改变所有值的。

$inc修改器: {"$inc": {field: value} }

将指定属性(field)的值增加特定的value,如果键不存在则创建它。(在原来的基础上增加)

$set修改器: {"$set": {field: value} }

用来指定一个键(field)的值(替换掉这个值),如果不存在则创建它

$push修改器: {"$push": {field: value} }

数组修改器,如果指定的键(field)存在,则向已有的数组末尾加入一个元素,键不存在则会创建一个新的数组 field一定要为数组

$pushAll修改器: {"$pushAll": {field: value_array} }

同$push, 但可以一次追加多个值到一个数组内

$addToSet修改器: {"$addToSet": {field: value} } 增加一个值到数组内,有且仅当这个值不在数组内才增加,确保数组内值唯一

 {
    条件字段: 值,
    更新字段: [2, 3, 4],
 }

 db.collection.update({条件字段: 值}, {"$addToSet": "更新字段": { {"$each": [111, 222]} } } );
 {
    条件字段: 值,
    更新字段: [2, 3, 4, 111, 222],
 }

 db.collection.update({条件字段: 值}, {"$addToSet": "更新字段": [111, 222] } );
 {
    条件字段: 值,
    更新字段: [2, 3, 4, 111, 222, [111, 222] ]
 }

$pull修改器: {"$pull": {field: value} } 从数组field内删除一个等于value值

$pullAll修改器: {"$pullAll": {field: value_array} } 同$pull,但可以一次删除数组内多个值

$操作符 $代表自已本身的意思,代表条件找出的数组内某项它自已, 只会找到第一条数组项,后面的不会在管

 {
    更新字段: [
        {
            id: 1,
            num: 2,
        },
        {
            id: 2,
            num: 3,
        }
    ]
 }

db.collection.update({"更新字段.id": 2}, {"$inc": {"更新字段.$.num": 3} }, false, true );

 {
    更新字段: [
        {
            id: 1,
            num: 2,
        },
        {
            id: 2,
            num: 6,
        }
    ]
 }

更新数组内对象元素的某一个属性

 {
    id: 1,
    arr: [
        {
            field1: 1,
            field2: 2,
        },
        {
            field1: 3,
            field2: 4,
        },
        .....,
    ],
 }
 db.collection.update({id: 1, "arr.field2": 2}, {"$set": {"arr.$.field1": 0} } );

查找id为1这条文档内数组arr内元素对象field2值等于2的元素,并将元素的field1属性变为0

upsert操作 upsert操作具有save/update的功能,如果没有文档符合更新条件,则以更新条件和更新文档为基础创建一个新的文档。如果有符合更新条件的文档,则正常更新。创建新文档时会以条件文档作为基础,将修改器作用其之上。upsert操作是原子性的,高效的

只需将update的第3个参数设为true == upserte

node.js版本

linux权限

调试node.js

数据库备份与集群

主从复制 . 选择其中一台服务器为主服务器,其于服务器为从服务器,主服务器定时将数据备份到从服务器中

分片技术

数据库运维 . 服务寄宿: 服务寄宿的本质是通过某种方式创建或指定一个进程,用以监听服务的请求和服务执行服务操作,为服务提供一个运行环境

如何用shell脚本来替代这行命令? cmd下管理员身份 运行mongodb: mongod --dbpath="数据库路径" --logpath="日志路径" --port 监听端口 --install --journal

--logpath: 使用服务寄宿时承载日志信息 --install: 开启安装服务寄宿