MongoDB笔记(二)常用操作指令

基本概念

数据库(database)

集合(collection)

文档(document)

  • 在MongoDB中,数据库和集合都不需要手动创建,当创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合。

基本指令

  • show dbsshow databases:显示当前的所有数据库。
  • use databaseName:进入到指定的数据库中。
  • db:当前所处的数据库。
  • show colloections:显示数据库中的所有集合。

数据库的CRUD操作

1. 向数据库中插入文档

db.collectionName.insert(docObject)
db.collectionName.insert([docObject])

#或者更加明确的语义:
db.collectionName.insertOne(docObject)
db.collectionName.insertMany([docObject])
  • db:数据库的名字。在命令行中,可以使用db指令获取当前数据库的名字。
  • collectionName:集合的名字。
  • insert为集合的方法。 docObject:文档对象。JSON对象。
  • [docObject0, ..., docObjectn]:表示向集合插入多个文档对象。用[]括起来,文档对象之间使用,分隔。
  • 向集合插入文档对象时,如果没有指定_id属性,数据库自动为文档添加_id属性,该属性用来作为文档的唯一标识符。可以通过ObjectId()根据时间戳和机器码生成id属性或者自己自由指定,要确保唯一性。
  • 向数据库中一次性插入多条数据:
	#多次调用数据库方法会导致性能下降
	for (var i = 1; i<=20000; i++){
		db.collectionName.insert({num:i});
	}

	#一次性插入多条数据
	var arr = [];
	for (var i = 1; i<=20000; i++){
		arr.push({num:i});
	}
	db.collectionName.insert(arr);

2. 查询当前集合中的文档

#查询当前集合中所有的文档
db.colloectionName.find()或db.colloectionName.find({})

#指定属性查询,返回一个满足条件的文档数组
db.colloectionName.find({ <field>:<value1>, ..., <fieldn>:<valuen>}) 

#指定属性查询,返回第一个满足条件的文档
db.colloectionName.findOne({<field>:<value1>})
  • 集合的find()方法返回一个数组。使用[]获取指定的索引的文档对象;使用.count().length()查看返回数组的长度。
  • 查询条件{<field>:<value>}表示的是在field属性的返回值中只要存在含有value则匹配成功。例如当value是数组的情况下:
	{ "name":zhangsan, "hobbys":["books", "movies", "sports"]}
	db.collectionName.find({"hobbys":"movies"})		#此时可以找到上述文档对象
  • 当查询条件中的value是文档时,称之为内嵌文档,所有的内嵌文档的访问都是支持点号.访问的,比如:
	{"name":zhangsan, "hobbys":{movies:["thriller", "action", "opera"]}
	db.collectionName.find({"hobbys.movies":"action"})	#此时可以找到上述文档对象
  • 如果value是递归文档,可以支持一直使用点号访问下去;如果是文档数组,也可以点号访问。
  • 使用查询操作符
	$eq		# target == a;					EXAMPLE: collectionName.find({num:{$eq:5});
	$gt		# target > a;					EXAMPLE: collectionName.find({num:{$gt:5});
	$gte	# target >= a; 					EXAMPLE: collectionName.find({num:{$gte:5});
	$in		# target == a || target == b;	EXAMPLE: collectionName.find({num:{$in:[5, 15]});
	$lt		# target < a;					EXAMPLE: collectionName.find({num:{$lt:5});
	$lte	# target <=a;					EXAMPLE: collectionName.find({num:{$lte:5});
	$ne		# target != a;					EXAMPLE: collectionName.find({num:{$ne:5});
	$nin	# target != a && target != b;	EXAMPLE: collectionName.find({num:{$nin:[5, 15]});
	
	# NOTE:
	# colloectionName.find({num:{$eq:5})和colloectionName.find({num:5})的区别:
	# 当num的属性返回值返回值是数组时,如果数组中包含5,后者是能够返回的,$eq不行,$eq要求属性返回值和测试条件等价。
  • 使用方法.limit().skip().limit(k)用于限制返回的文档数量(返回k条)。.skip(k)用于跳过前k条数据。
	collectionName.find().limit(20);
	collectionName.find().skip(40).limit(20)或collectionName.find().limit(20).skip(40)
  • 使用方法.sort()对查询的文档进行排序
	#将查询结果按照field属性排序,参数k为int型,1表示升序排序,-1表示降序排序
	db.collectionName.find({}).sort({<field>:k})
	
	#将查询结果先按field0排序,如果相同的再按field1排序,'k==1'为升序,'k==-1'为降序
	db.collectionName.find({}).sort({<field0>:k0, <field1>:k1})
  • 为find传入第二个条件对象,对查询结果的显示进行过滤?
	#对返回的文档数组投影
	#当'k==1'的时候该属性及其对应的字段投影,当'k==0'时不投影;
	#_id属性默认是投影的,如果要禁用设置'_id:0'以禁用;
	db.collectionName.find({}, {field0:k0, field1:k1, field2:k2})

3. 修改集合中的文档

db.collectionName.update(<filter>, <update>, <options>)

#或者使用更加明确的语义
db.collectionName.updateOne(<filter>, <update>)
db.collectionName.updateMany(<filter>, <update>)
db.collectionName.replaceOne(<filter>, <update>)
  • <filter>:表示过滤条件。用来判断修改哪个文档。

  • <update>:表示更新后的文档。描述了怎么更新该文档。具有以下的形式:

	#Update docment.
	{
		<update operator>: { <field1>: <value1>, ... },
 		<update operator>: { <field2>: <value2>, ... },
 		...
	}

其中,<update operator>为修改操作符,描述了不同的修改操作。可以在官方文档中查询。

  • <options>:表示修改的配置选项。

4. 删除集合中的文档

db.collectionName.remove(docObject) #删除一个或多个文档,可以第二个参数传递一个true,则只会删除一个,如果传递一个空参数会删除所有。

或者
db.collectionName.deleteOne(docObject)
db.collectionName.deleteMany(docObject)
db.collectionName.drop() #删除集合,如果是最后一个集合,会同时删除数据库
db.dropDatabase() #删除数据库

删库跑路?

参考文献

官网文档
B站视频

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值