上篇讲了MongoDB的基础知识,大家应该对MongoDB有所了解了,当然真正用的还是curd操作,本篇为大家讲解MongoDB的curd操作。

1、数据库操作

#、增
use config #如果数据库不存在,则创建数据库,否则切换到指定数据库。 #、查
show dbs #查看所有
要想显示出刚创建的数据库,我们需要向数据库插入一些数据。
db.table1.insert({'a':}) #、删
use config #先切换到要删的库下
db.dropDatabase() #删除当前库

2、集合操作

#、增
当第一个文档插入时,集合就会被创建
> use database1
switched to db database1
> db.table1.insert({'a':})
WriteResult({ "nInserted" : })
> db.table2.insert({'b':})
WriteResult({ "nInserted" : }) #、查
> show tables
table1
table2 #、删
> db.table1.drop()
true
> show tables
table2

3、文档操作

  1)增加数据

#创建一个user的局部变量,这是一个JavaScript对象
user={
"name":"ming",
'is_nb':true,
'hobbies':['music','read','game']
} db.userinfo.insert(user)
db.userinfo.find() user1={
"name":"asb",
'is_sb':true,
'hobbies':['music','sports']
}
user2={
"name":"egon",
'is_sb':'wxx',
'hobbies':['music','read','dancing']
} user3={
"name":"alex",
'is_sb':false,
'hobbies':['music','read','girls']
}
db.userinfo.insertMany([user1,user2,user3]) #一次插入多个文档

  2)修改数据

  

 复制代码
update() 方法用于更新已存在的文档。语法格式如下:
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
参数说明:对比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18; query : 相当于where条件。
update : update的对象和一些更新的操作符(如$,$inc...等,相当于set后面的
upsert : 可选,默认为false,代表如果不存在update的记录不更新也不插入,设置为true代表插入。
multi : 可选,默认为false,代表只更新找到的第一条记录,设为true,代表更新找到的全部记录。
writeConcern :可选,抛出异常的级别。 更新操作是不可分割的:若两个更新同时发送,先到达服务器的先执行,然后执行另外一个,不会破坏文档。 update用法介绍

update用法

  

#1、最简单的更新就是用一个新的文档完全替换匹配的文档。这适用于大规模式迁移的情况。例如对下面的用户文档做
一个比较大的调整
> db.user.find().pretty()
{
"_id" : ObjectId("5a5b3a74c126b4b2cbb57e3f"),
"name" : "ming",
"girl_friends" : 20,
"height" : 170
} # 先找到要修改的对象
> var obj=db.user.findOne({'name':'ming'})
> obj
{
"_id" : ObjectId("5a5b3a74c126b4b2cbb57e3f"),
"name" : "ming",
"girl_friends" : 20,
"height" : 170
}
# 修改
> obj.detail={'girl_friends':20,'height':170}
{ "girl_friends" : 20, "height" : 170}
> obj.username=obj.name
egon # 删掉不要的
> delete obj.girl_friends
true
> delete obj.height
true
> delete obj.name
true # 完成更新
> db.user.update({'name':'ming'},obj)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a5b3a74c126b4b2cbb57e3f"), "detail" : { "girl_friends" : 20, "height" : 170}, "username" : "ming" } 简单更新

简单更新

2、一个常见的错误
db.user.insert({'name':'ming','age':10})
db.user.insert({'name':'ming','age':20})
db.user.insert({'name':'ming','age':30})
> db.user.find()
{ "_id" : ObjectId("5a5b3ecac126b4b2cbb57e43"), "name" : "ming", "age" : 10 }
{ "_id" : ObjectId("5a5b3ecbc126b4b2cbb57e44"), "name" : "ming", "age" : 20 }
{ "_id" : ObjectId("5a5b3ecdc126b4b2cbb57e45"), "name" : "ming", "age" : 30 } # 找到的是第二个ming,他要过生日,于是长了一岁
> var obj=db.user.findOne({'name':'ming','age':20})
> obj.age++ # 我们的条件只定位到第二条记录这一条记录,所以更新是没问题的,
> db.user.update({'name':'ming','age':20},obj)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 我们的条件定位到了多条记录,而obj对象的_id是一定的,文档中的_id是唯一的,我们无法将三条改成同一个_id,所以报错
> db.user.update({'name':'ming'},obj) #报错 # 删掉后,更新成功,但默认改的是第一条
> delete obj._id
true
> obj
{ "name" : "ming", "age" : 21 }
> db.user.update({'name':'ming'},obj)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a5b40f6c126b4b2cbb57e46"), "name" : "ming", "age" : 21 }
{ "_id" : ObjectId("5a5b40f6c126b4b2cbb57e47"), "name" : "ming", "age" : 20 }
{ "_id" : ObjectId("5a5b40f6c126b4b2cbb57e48"), "name" : "ming", "age" : 30 }
> # 所以针对这种情况,我们还以_id作为条件保证只定位到我们想要修改的对象,并且比起随机字符串,_id的查找速度更快
> db.user.update({'_id':ObjectId("5a5b40f6c126b4b2cbb57e47")},obj) # ps: 改多条
> db.user.update({'name':'ming'},obj,{'multi':true})
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 9,
"errmsg" : "multi update only works with $ operators" #只能用修改器
}
})
> db.user.update({'name':'ming'},{$set:obj},{'multi':true})
WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 1 }) 一个常见的错误

常见错误

 通常文档只会有一部分需要更新。可以使用原子性的更新修改器,指定对文档中的某些字段进行更新。
更新修改器是种特殊的键,用来指定复杂的更新操作,比如修改、增加后者删除 #=======>1、"$set"修改器
> db.user.find()
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb4"), "name" : "egon", "age" : 10 }
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb5"), "name" : "egon", "age" : 20 }
{ "_id" : ObjectId("5a5b51a357147a04b81f2bb6"), "name" : "egon", "age" : 30 }
#完全覆盖原文档
> db.user.update({'_id':ObjectId("5a5b51a257147a04b81f2bb4")},{'age':111})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb4"), "age" : 111 }
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb5"), "name" : "egon", "age" : 20 }
{ "_id" : ObjectId("5a5b51a357147a04b81f2bb6"), "name" : "egon", "age" : 30 }
> #$set只更新原文档的一部分
> db.user.update({'_id':ObjectId("5a5b51a257147a04b81f2bb5")},{'$set':{'age':222}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb4"), "age" : 111 }
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb5"), "name" : "egon", "age" : 222 }
{ "_id" : ObjectId("5a5b51a357147a04b81f2bb6"), "name" : "egon", "age" : 30 } # 有则更新,无则新增
> db.user.update({'age':30},{'$set':{'addr':{'country':'China','city':'BJ'}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.user.find()
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb4"), "age" : 111 }
{ "_id" : ObjectId("5a5b51a257147a04b81f2bb5"), "name" : "egon", "age" : 222 }
{ "_id" : ObjectId("5a5b51a357147a04b81f2bb6"), "name" : "egon", "age" : 30, "addr" : { "country" : "China", "city" : "BJ" } } # 修改内嵌文档
db.user.update({'age':30},{'$set':{'addr.country':'CHINA'}}) # $unset 删除该键值对
db.user.update({'age':30},{'$unset':{'addr':'什么值都行'}}) #=======>2、增加和减少
"$inc"修改器用来增加已经有的键的值(负数则为减少),或者该键不存在那就创建一个。只能用于整型、长整型或双浮点
的值。
对于更新分析数据、因果关系、投票或者其他有变化数值的地方,使用这个都会非法方便 例如:
> db.analytics.find()
{ "_id" : ObjectId("5a5b4cb2126d610970c553ab"), "url" : "http://www.baidu.com", "pv" : 2 }
> db.analytics.update({'url':'http://www.baidu.com'},{'$inc':{'pv':1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.analytics.find()
{ "_id" : ObjectId("5a5b4cb2126d610970c553ab"), "url" : "http://www.baidu.com", "pv" : 3 }
使用修改器时,_id的值不能改变。其他的键值,包括其他的唯一索引的键,都是可以更改的。
注意:整个文档替换时可以改变_id #=======>3、往数组内添加元素
如果数组已经存在,"$push"会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组。
例如提交博客的评论 db.blog.insert({'_id':1,'name':'alex意外死亡的真相'}) db.blog.update({'_id':1},{'$push':{'comments':{"name":"egon","content":'alex是谁???'}}})
db.blog.update({'_id':1},{'$push':{'comments':{"name":"wxx","content":'我去,真的假的'}}})
db.blog.update({'_id':1},{'$push':{'comments':{"name":"yxx","content":'吃喝嫖赌抽,欠下两个亿'}}}) > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "egon",
"content" : "alex是谁???"
},
{
"name" : "wxx",
"content" : "我去,真的假的"
},
{
"name" : "yxx",
"content" : "吃喝嫖赌抽,欠下两个亿"
}
]
} # 一次加多个"$push"
db.blog.update({'_id':1},{'$push':{'comments':{'$each':[{'name':'oldboy','content':'鼓掌'},{'name':'oldgirl','content':'一鞠躬'}]}}}) > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "egon",
"content" : "alex是谁???"
},
{
"name" : "wxx",
"content" : "我去,真的假的"
},
{
"name" : "yxx",
"content" : "吃喝嫖赌抽,欠下两个亿"
},
{
"name" : "oldboy",
"content" : "鼓掌"
},
{
"name" : "oldgirl",
"content" : "一鞠躬"
}
]
} # 限制大小"$slice",只留最后n个
db.blog.update({'_id':1},{'$push':{'comments':{'$each':[
{'name':'xxx','content':'二鞠躬'},
{'name':'yyy','content':'三鞠躬'},
{'name':'yyy','content':'四鞠躬'},
{'name':'zzz','content':'五鞠躬'},
{'name':'mmm','content':'六鞠躬'},
{'name':'nnn','content':'七鞠躬'},
],
'$slice':-7
}}}) > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "oldgirl",
"content" : "一鞠躬"
},
{
"name" : "xxx",
"content" : "二鞠躬"
},
{
"name" : "yyy",
"content" : "三鞠躬"
},
{
"name" : "yyy",
"content" : "四鞠躬"
},
{
"name" : "zzz",
"content" : "五鞠躬"
},
{
"name" : "mmm",
"content" : "六鞠躬"
},
{
"name" : "nnn",
"content" : "七鞠躬"
}
]
} #=======>4、The $sort element value must be either 1 or -1"
# '$sort':{'name': 1}升序排
db.blog.update({'_id':1},{'$push':{'comments':{'$each':[
{'name':'aaa','content':'礼毕'},
],
'$slice':-3,
'$sort':{'name': 1}
}}}) > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "yyy",
"content" : "三鞠躬"
},
{
"name" : "yyy",
"content" : "四鞠躬"
},
{
"name" : "zzz",
"content" : "五鞠躬"
}
]
} # '$sort':{'name': -1} 降序排
db.blog.update({'_id':1},{'$push':{'comments':{'$each':[
{'name':'aaa','content':'礼毕'},
],
'$slice':-2,
'$sort':{'name': -1}
}}}) > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "yyy",
"content" : "四鞠躬"
},
{
"name" : "aaa",
"content" : "礼毕"
}
]
} #注意:不能只将"$slice"或者"$sort"与"$push"配合使用,且必须使用"$each" #=======>5、避免添加重复 "$addToSet"
> db.urls.insert({'_id':1,'urls':[]})
WriteResult({ "nInserted" : 1 })
> db.urls.find()
{ "_id" : 1, "urls" : [ ] } db.urls.update({'_id':1},{'$addToSet':{'urls':'http://www.baidu.com'}})
db.urls.update({'_id':1},{'$addToSet':{'urls':'http://www.baidu.com'}})
db.urls.update({'_id':1},{'$addToSet':{'urls':'http://www.baidu.com'}})
db.urls.update({'_id':1},{'$addToSet':{'urls':'http://www.python.org'}})
> db.urls.find()
{ "_id" : 1, "urls" : [ "http://www.baidu.com", "http://www.python.org" ] } db.urls.update({'_id':1},{
'$addToSet':{
'urls':{
'$each':['http://www.baidu.com','http://www.baidu.com','http://www.xxx.com']
}
}
})
> db.urls.find()
{ "_id" : 1, "urls" : [ "http://www.baidu.com", "http://www.python.org", "http://www.xxx.com" ] } #=======>6、删除元素
如果把数组看成是队列或者栈,可以用"$pop",这个修改器可以从数组任何一端删除元素。
{"$pop":{"key":1}} 从数组末尾删除一个元素
{"$pop":{"key":-1}} 从头部删除 > db.queue.insert({'_id':1,'queue':[]})
WriteResult({ "nInserted" : 1 })
# 入队列
db.queue.update({'_id':1},{'$push':{'queue':'alex'}})
db.queue.update({'_id':1},{'$push':{'queue':'egon'}})
db.queue.update({'_id':1},{'$push':{'queue':'wxx'}})
db.queue.update({'_id':1},{'$push':{'queue':'yxx'}}) > db.queue.find()
{ "_id" : 1, "queue" : [ "alex", "egon", "wxx", "yxx" ] } # 出队列
db.queue.update({'_id':1},{"$pop":{"queue":-1}})
db.queue.update({'_id':1},{"$pop":{"queue":-1}})
db.queue.update({'_id':1},{"$pop":{"queue":-1}}) # "$pull" 把符合条件的统统删掉,而$pop只能按照位置删除
db.queue.update({'_id':1},{"$pull":{"queue":'yxx'}}) #=======>7、基于位置的数组修改器
db.blog.insert({'_id':1,'name':'alex意外死亡的真相'}) db.blog.update({'_id':1},{'$push':{'comments':{"name":"egon","content":'alex是谁???','thumb':20}}})
db.blog.update({'_id':1},{'$push':{'comments':{"name":"wxx","content":'我去,真的假的','thumb':30}}})
db.blog.update({'_id':1},{'$push':{'comments':{"name":"yxx","content":'吃喝嫖赌抽,欠下两个亿','thumb':40}}}) > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "egon",
"content" : "alex是谁???",
"thumb" : 20
},
{
"name" : "wxx",
"content" : "我去,真的假的",
"thumb" : 30
},
{
"name" : "yxx",
"content" : "吃喝嫖赌抽,欠下两个亿",
"thumb" : 40
}
]
} 根据下标修改
db.blog.update({'_id':1},{'$set':{'comments.0.thumb':200}}) 必须查询才知道下表,所以提供了$,$ 代表根据条件匹配出的元素
db.blog.update({'comments.name':'wxx'},{'$set':{'comments.$.thumb':300}}) #=======>8、upsert与multi
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ) #全部添加加进去 修改器

"$set"修改器

  

  3)查数据

 # 查找一条
db.userinfo.findOne()
# 查找所有
db.userinfo.find()
db.userinfo.find().pretty() #格式化显示 # 多个and条件
db.user.find({'name':'egon','age':{'$gt':20}}) # 也可不写条件,代表匹配所有
db.user.find({}) # 规定显示结果中有哪些key没有哪些key
> db.user.find({},{'_id':0,'name':1,'age':1})
{ "name" : "egon", "age" : 10 }
{ "name" : "egon", "age" : 20 }
{ "name" : "egon", "age" : 30 } # "$lt" "lte" "$gt" "gte" "$ne",其中"$ne"能用于所有数据类型
db.user.find({'age':{'$gte':10,'$lt':30}}) # or查询,or的条件放到[]内,注意:一个{}内逗号分开的多个条件相当于and
db.user.find({'$or':[{'name':'egon'},{'age':{'$gte':30}}]}) # in和nin
db.user.find({'age':{'$in':[10,11,12,20]}})
db.user.find({'age':{'$nin':[10,11,12,20]}}) # {'$mod':[2,1]},对2取余如果为1则匹配成功
db.user.insert({'_id':1,'name':'egon','age':10})
db.user.insert({'_id':2,'name':'egon','age':20})
db.user.insert({'_id':3,'name':'egon','age':30}) > db.user.find()
{ "_id" : 1, "name" : "egon", "age" : 10 }
{ "_id" : 2, "name" : "egon", "age" : 20 }
{ "_id" : 3, "name" : "egon", "age" : 30 } > db.user.find({'_id':{'$mod':[2,1]}})
{ "_id" : 1, "name" : "egon", "age" : 10 }
{ "_id" : 3, "name" : "egon", "age" : 30 } # not 取反
> db.user.find({'_id':{'$not':{'$mod':[2,1]}}})
{ "_id" : 2, "name" : "egon", "age" : 20 } # {'key':null} 匹配key的值为null或者没有这个key # 正则表达式
> db.user.find({'name':/^e.*?n$/i})
{ "_id" : 1, "name" : "egon", "age" : 10 }
{ "_id" : 2, "name" : "egon", "age" : 20 }
{ "_id" : 3, "name" : "egon", "age" : 30 } # 查询数组
> db.food.insert({'fruit':['apple','banana','peach']})
WriteResult({ "nInserted" : 1 })
> db.food.find({'fruit':'banana'}) #只要存在就可以
{ "_id" : ObjectId("5a5b7ad057147a04b81f2bc3"), "fruit" : [ "apple", "banana", "peach" ] } > db.food.find({'fruit':{'$all':['banana','apple']}}) #既有banana又有apple > db.food.find({'fruit.1':'banana'}) #按照位置 > db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "egon",
"content" : "alex是谁???",
"thumb" : 200
},
{
"name" : "wxx",
"content" : "我去,真的假的",
"thumb" : 300
},
{
"name" : "yxx",
"content" : "吃喝嫖赌抽,欠下两个亿",
"thumb" : 40
},
{
"name" : "egon",
"content" : "xxx",
"thumb" : 0
}
]
}
db.blog.find({},{'comments':{"$slice":-2}}).pretty() #查询最后两个
db.blog.find({},{'comments':{"$slice":[1,2]}}).pretty() #查询1到2 # 数组和范围查询的相互作用
db.test.insert({'x':5})
db.test.insert({'x':15})
db.test.insert({'x':25})
db.test.insert({'x':[5,25]}) > db.test.find({'x':{'$gt':10,'$lt':20}})
{ "_id" : ObjectId("5a5b8310b9b1b7388a40f993"), "x" : 15 }
{ "_id" : ObjectId("5a5b8310b9b1b7388a40f995"), "x" : [ 5, 25 ] }
#发现连非数组的也找出来了,如果只想匹配数组,则用$elemMatch
> db.test.find({'x':{"$elemMatch":{'$gt':10,'$lt':20}}}) #匹配不到内容
> db.test.find({'x':{"$elemMatch":{'$gt':5,'$lt':115}}}) #25属于该范围
{ "_id" : ObjectId("5a5b8310b9b1b7388a40f995"), "x" : [ 5, 25 ] } #如果只想匹配非数组需要建立索引,结合min与max使用

  4)删除数据

 db.userinfo.deleteOne({ 'is_sb': true }) #删除多个中的第一个
db.userinfo.find()
db.userinfo.deleteMany( { 'x'': 1 } ) # 删除x=1的全部
db.userinfo.deleteMany({}) #删除全部

  本篇讲解了MongoDB的增删改查语法,下篇讲解Springboot集成MongoDB操作。

MongoDB系列(三):增删改查(CURD)的更多相关文章

  1. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  2. MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo

    一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...

  3. 利用koa实现mongodb数据库的增删改查

    概述 使用koa免不了要操纵数据库,现阶段流行的数据库是mongoDB,所以我研究了一下koa里面mongoDB数据库的增删改查,记录下来,供以后开发时参考,相信对其他人也有用. 源代码请看:我的gi ...

  4. vue实现对数据的增删改查(CURD)

    vue实现对数据的增删改查(CURD) 导语: 网上看到一个写的比较好的学习文章,转载分享一下 在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的 ...

  5. webpack4+express+mongodb+vue 实现增删改查

    在讲解之前,我们先来看看效果如下所示: 1)整个页面的效果如下: 2) 新增数据效果如下: 3) 新增成功如下: 4) 编辑数据效果如下: 5) 编辑成功效果如下: 6) 删除数据效果如下: 7) 删 ...

  6. nodejs对mongodb数据库的增删改查操作(转载)

    首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...

  7. 69.nodejs对mongodb数据库的增删改查操作

    转自:https://www.cnblogs.com/sexintercourse/p/6485381.html 首先要确保mongodb的正确安装,安装参照:http://docs.mongodb. ...

  8. python连接集群mongodb,封装增删改查

    1.下载pymongo pip install pymongo 2.直接上代码 [ini配置文件] 封装读ini省略~~ [db.py] class Database(): def __init__( ...

  9. 三分钟小课堂-----------------docker(三)增删改查命令

    主要为docker容器的增删改查命令 1  创建容器: docker run   -it   --name 别名  image_name   /bin/bash --name 别名 -d 后台 -t ...

  10. MongoDB学习之--增删改查(1)

    本文是对mongodb学习的一点笔记,主要介绍最简单的增删改操作,初学,看着API,有什么错误,希望大家指正:(使用官方驱动) 1.增 增加操作是最简单的,构造bsonDcument插入即可: 方式1 ...

随机推荐

  1. 阶段3 3.SpringMVC·_05.文件上传_1 文件上传之上传原理分析和搭建环境

    分成几个部分 里面可能就包含文件上传的值 提交方式要改成post 第三个就是提供一个input file的文件选择域 新建项目 新建一个项目 当前项目没有父工程 跳过联网下载 改成02 构建 编译和目 ...

  2. Windows安装使用npm(Nodejs)

    转载参考:https://blog.csdn.net/han0373/article/details/80606487 1:下载 https://nodejs.org/en/ 2:查看是否安装成功 w ...

  3. Rxjava2实战--第四章 Rxjava的线程操作

    Rxjava2实战--第四章 Rxjava的线程操作 1 调度器(Scheduler)种类 1.1 RxJava线程介绍 默认情况下, 1.2 Scheduler Sheduler 作用 single ...

  4. [笔记] Delphi使用DUnitX做单元测试的简单例子

    Delphi XE 提供了对DUnitX的支持,记录一个最简例子. 首先创建项目A,然后创建单元untCalc,代码如下: unit untCalc; interface type TCalc = c ...

  5. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2

    之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...

  6. C# Timespan Tostring 时分秒格式

    timeSpan.ToString(@"hh\:mm\:ss");

  7. gitlab 数据目录迁移

    一般情况下,采用gitlab作为版本管理工具,内网环境需要搭建gitlab服务器,安装好gitlab应用之后,就开始使用,但是随着时间的推移,发现gitlab的repository会越来越大.一般,从 ...

  8. PJzhang:我发现一个有两个答案的数独题

    猫宁!!! 最近做数独题,发现了一个答案不唯一的数独,之前对此类数独有所耳闻,但是没有亲手发现,碰巧发现一个,很是欣喜.   下面展示了两个答案   第一个 ​​   第二个 ​​   绿色标签是答案 ...

  9. Linux批量文件管理

    Linux批量文件管理   实验目标: 通过本实验掌握批量建立.移动.复制文件或目录的操作,也可以作为后续shell编程的基础. 实验步骤: 1.现在有十台终端机器,要为每台机器建立3个文件,总共要建 ...

  10. 应用安全 - JavaScript - 框架 - Jquery - 漏洞 - 汇总

    jQuery CVE-2019-11358 Date 类型 原型污染 影响范围 CVE-2015-9251  Date 类型跨站 影响范围<jQuery 3.0.0