MongoDB数据库操作

数据操作;
  一些主要的函数(以dept为例):
	db.dept.remove();    全部删除,括号内有条件则删除满足条件的数据。
	db.dept.find();      查找全部数据(数量不多的情况下全部显示出来)
	db.dept.findOne();   查找一条数据
	db.dept.update(数据);更新数据
	db.dept.insert(数据);插入数据
	
	
创建students集合:
	db.students.drop();
	db.students.insert({"name":"张三","sex":"m","age":16,"score":89,"address":"BeiJing"});
	db.students.insert({"name":"李四","sex":"w","age":17,"score":56,"address":"ShangHai"});
	db.students.insert({"name":"王五","sex":"w","age":15,"score":76,"address":"GuangXi"});
	db.students.insert({"name":"赵六","sex":"m","age":19,"score":23,"address":"HuNan"});
	db.students.insert({"name":"王超","sex":"m","age":20,"score":93,"address":"GuangDong"});
	db.students.insert({"name":"马汉","sex":"m","age":22,"score":80,"address":"HuBei"});


1、数据增加:db.集合.insert();
	例如:db.infos.insert({"url":"www.huaxin.com"});
	多个数据:可用数组形式
	大量数据:用JavaScript代码(创建infos集合)
	for(var i = 0;i<10000;i++){
		db.infos.insert({"url":"www.huaxin.com"+i});
	}

2、数据查询:db.集合名称.find({查询条件});
	数据很多的时候,不会全部查出来,想要继续查看,可用it命令
	投影操作:对于设置的显示字段;如果不需要显示的字段设置为0,需要显示的字段设置为1
	漂亮显示:db.集合名称.find({查询条件}).pretty();


	(1)关系运算:>:$gt   <:$lt    >=:$gte    <=:$lte
	查询年龄大于17的学生,不显示_id,使用pretty()显示
	db.students.find({"age":{"$gt":17}},{"_id":0}).pretty();
	{
			"name" : "赵六",
			"sex" : "m",
			"age" : 19,
			"score" : 23,
			"address" : "HuNan"
	}
	{
			"name" : "王超",
			"sex" : "m",
			"age" : 20,
			"score" : 93,
			"address" : "GuangDong"
	}
	{
			"name" : "马汉",
			"sex" : "m",
			"age" : 22,
			"score" : 80,
			"address" : "HuBei"
	}

	(2)逻辑运算:与:$and 或:$or 非:$not\$nor
		1> 查询年龄16-20的学生,不显示_id
			 db.students.find({"age":{"$gte":16,"$lte":20}},{"_id":0});
			{ "name" : "张三", "sex" : "m", "age" : 16, "score" : 89, "address" : "BeiJing" }
			{ "name" : "李四", "sex" : "w", "age" : 17, "score" : 56, "address" : "ShangHai" }
			{ "name" : "赵六", "sex" : "m", "age" : 19, "score" : 23, "address" : "HuNan" }
			{ "name" : "王超", "sex" : "m", "age" : 20, "score" : 93, "address" : "GuangDong" }
		and:只需","分隔
		2> 年龄不是22的学生
			db.students.find({"age":{"$ne":22}});
			年龄大于18,或者成绩大于70的学生
			db.students.find({"$or":[
			... {"age":{"$gt":22}},
			... {"score":{"$gt":70}}
			... ]});
			{ "_id" : ObjectId("582fd1de0f537b6768a92120"), "name" : "张三", "sex" : "m", "a
			ge" : 16, "score" : 89, "address" : "BeiJing" }
			{ "_id" : ObjectId("582fd1df0f537b6768a92122"), "name" : "王五", "sex" : "w", "a
			ge" : 15, "score" : 76, "address" : "GuangXi" }
			{ "_id" : ObjectId("582fd1df0f537b6768a92124"), "name" : "王超", "sex" : "m", "a
			ge" : 20, "score" : 93, "address" : "GuangDong" }
			{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "a
			ge" : 22, "score" : 80, "address" : "HuBei" }
			or:需要设置数组的形式

	(3)求模:$mod  {$mod:[数字位,余数]}
	db.students.find({"age":{$mod:[20,2]}});
 
	db.students.find({"age":{$mod:[20,2]}});
	{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "a
	ge" : 22, "score" : 80, "address" : "HuBei" }


	(4)范围查询:在范围内:$in {$in:[value1,value2...]}
				 不在范围内:$nin
		
	(5)数组查询:$all  $size $slice $elemMatch
		内容都包含:$all   {"$all":[value1,value2....]}
		可以用索引查询(index)
		1> 查询数组中第二个内容为数学的信息
		db.students.find({"course.1":"数学"});
		2> 查询只参加两门课程的学生
		db.students.find({"course":{“$size”:2}});
		3> 控制返回数量:只显示两门的课程
		db.students.find({"course":{“$slice”:2}}); -----也可以设置为负数,表示取后面的数


	(6)嵌套查询:$elemMatch
		字段判断:是否存在$exists  true 存在   false  不存在
		where条件过滤:$where
			1> db.students.find({"$where":"this.age>20"});
			2> db.students.find("this.age>20");
			3> db.students.find(function(){
			   return this.age>20;
			});
			以上三种查询结果一样:
				db.students.find({"$where":"this.age>20"});
				{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "a
				ge" : 22, "score" : 80, "address" : "HuBei" }

				> db.students.find("this.age>20");
				{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "a
				ge" : 22, "score" : 80, "address" : "HuBei" }
				
				> db.students.find(function(){
				...    return this.age>20;
				... });
				{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "a
				ge" : 22, "score" : 80, "address" : "HuBei" }
				>
				虽然这种形式的操作可以实现数据查询,但是最大的缺点是将在MongoDB里面保存的JSON数据变为了JavaScript的语法结构。这样的方式不方便使用数据库索引机制。

	(7)模糊查询(正则表达式):{key:{"$regex":正则标记,"$option":选项}}
		1> db.students.find({"name":/王/i});
		2> db.students.find({"name":{"$regex":/王/i}});
		以上两种查询结果一样:
			 db.students.find({"name":/王/i});
			{ "_id" : ObjectId("582fd1df0f537b6768a92122"), "name" : "王五", "sex" : "w", "age" : 15, "score" : 76, "address" : "GuangXi" }
			{ "_id" : ObjectId("582fd1df0f537b6768a92124"), "name" : "王超", "sex" : "m", "age" : 20, "score" : 93, "address" : "GuangDong" }
			 
			> db.students.find({"name":{"$regex":/王/i}});
			{ "_id" : ObjectId("582fd1df0f537b6768a92122"), "name" : "王五", "sex" : "w", "age" : 15, "score" : 76, "address" : "GuangXi" }
			{ "_id" : ObjectId("582fd1df0f537b6768a92124"), "name" : "王超", "sex" : "m", "age" : 20, "score" : 93, "address" : "GuangDong" }

	(8)数据排序:sort():升序(1),降序(-1)。
		 db.students.find().sort({"score":-1});
		{ "_id" : ObjectId("582fd1df0f537b6768a92124"), "name" : "王超", "sex" : "m", "age" : 20, "score" : 93, "address" : "GuangDong" }
		{ "_id" : ObjectId("582fd1de0f537b6768a92120"), "name" : "张三", "sex" : "m", "age" : 16, "score" : 89, "address" : "BeiJing" }
		{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "age" : 22, "score" : 80, "address" : "HuBei" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92122"), "name" : "王五", "sex" : "w", "age" : 15, "score" : 76, "address" : "GuangXi" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92121"), "name" : "李四", "sex" : "w", "age" : 17, "score" : 56, "address" : "ShangHai" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92123"), "name" : "赵六", "sex" : "m", "age" : 19, "score" : 23, "address" : "HuNan" }
		>

		自然排序:按照保存的先后顺序排序 $natural 
		>  db.students.find().sort({"$natural":-1});
		{ "_id" : ObjectId("582fd1e00f537b6768a92125"), "name" : "马汉", "sex" : "m", "age" : 22, "score" : 80, "address" : "HuBei" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92124"), "name" : "王超", "sex" : "m", "age" : 20, "score" : 93, "address" : "GuangDong" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92123"), "name" : "赵六", "sex" : "m", "age" : 19, "score" : 23, "address" : "HuNan" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92122"), "name" : "王五", "sex" : "w", "age" : 15, "score" : 76, "address" : "GuangXi" }
		{ "_id" : ObjectId("582fd1df0f537b6768a92121"), "name" : "李四", "sex" : "w", "age" : 17, "score" : 56, "address" : "ShangHai" }
		{ "_id" : ObjectId("582fd1de0f537b6768a92120"), "name" : "张三", "sex" : "m", "age" : 16, "score" : 89, "address" : "BeiJing" }

	数据的分页显示:skip(n)表示跨过几行数据 limit(n):取出的数据行的个数限制
	> db.students.find().skip(0).limit(3);
	{ "_id" : ObjectId("582fd1de0f537b6768a92120"), "name" : "张三", "sex" : "m", "age" : 16, "score" : 89, "address" : "BeiJing" }
	{ "_id" : ObjectId("582fd1df0f537b6768a92121"), "name" : "李四", "sex" : "w", "age" : 17, "score" : 56, "address" : "ShangHai" }
	{ "_id" : ObjectId("582fd1df0f537b6768a92122"), "name" : "王五", "sex" : "w", "age" : 15, "score" : 76, "address" : "GuangXi" }
	>;



3、数据更新:save()   update()
	(1) db.集合.update(更新条件,新的对象数据(更新修饰符),upsert,multi)
		upsert:如果更新的数据不存在,则增加一条新的数据  true:可以增加。false:不增加
		multi:表示是否只更新满足条件的第一条数据  true:可以修改全部 false:只修改一行
	 1>只修改一行
	db.students.update({"age":{"$gt":16}},{"$set":{"score":99}},false,false)
	WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
	2>可以修改全部
	> db.students.update({"age":{"$gt":16}},{"$set":{"score":99}},false,true)
	WriteResult({ "nMatched" : 4, "nUpserted" : 0, "nModified" : 3 })

	修改器:
	1、$inc:主要针对于一个数字字段、增加某个数字字段的内容
	{“$inc”:{"成员":内容}}
	 db.students.update({"age":16},{"$inc":{"score":-10}})
	WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
	2、$set {“$set”:{"成员":内容}}
	3、$unset 删除某个成员的内容  {“$unset”:{"成员":1}}
	4、$push   相当于将内容追加到指定的成员之中  {“$push”:{"成员":value}}
	5、$pushAll  可以一次追加多个内容到数组里面   {“$push”:{"成员":数据内容}}
	6、$addToSet 向 不存在的时候才增加 {“$addToSet:{"成员":内容}}
	7、$pop 删除数组内的数据  {“$pop”:{"成员":内容}} 内容为1:表示删除第一个 内容为-1:表示删除最后一个
	8、$pull  从数组内删除指定内容的数据  {“$pull”:{"成员":数据}} 
	9、$pullAll  从数组内删除指定的多个内容的数据  {“$pullAll”:{"成员":数组}} 
	10、$rename  为成员名称重命名  {“$rename:{old_name:new_name}}


4、数据删除  remove()
	db.infos.remove()   
	参数:(1)删除条件 
		  (2)是否只删除一个数据(true:只删除一个   默认:全部删除)


5、游标:是指数据可以一行行的进行操作,类似于ResultSet
	var cursor = db.students.find()
	hasNext()是否有下一行数据
	next() 取出数据
	运行结果:
		 var cursor = db.students.find()
		> cursor.hasNext()
		true
		> cursor.next()
		{
				"_id" : ObjectId("582fd1de0f537b6768a92120"),
				"name" : "张三",
				"sex" : "m",
				"age" : 16,
				"score" : 69,
				"address" : "BeiJing"
		}
		>
		 var cursor = db.students.find()
		> while(cursor.hasNext()){
		...   var doc = cursor.next();
		...   print(doc.name);
		... }
		张三
		李四
		王五
		赵六
		王超
		马汉

    将数据安装json形式出现,需要用到printjson()
	 var cursor = db.students.find()
	>  while(cursor.hasNext()){
	...    var doc = cursor.next();
	...    printjson(doc);
	... }
	{
			"_id" : ObjectId("582fd1de0f537b6768a92120"),
			"name" : "张三",
			"sex" : "m",
			"age" : 16,
			"score" : 69,
			"address" : "BeiJing"
	}
	{
			"_id" : ObjectId("582fd1df0f537b6768a92121"),
			"name" : "李四",
			"sex" : "w",
			"age" : 17,
			"score" : 99,
			"address" : "ShangHai"
	}
	{
			"_id" : ObjectId("582fd1df0f537b6768a92122"),
			"name" : "王五",
			"sex" : "w",
			"age" : 15,
			"score" : 76,
			"address" : "GuangXi"
	}
	{
			"_id" : ObjectId("582fd1df0f537b6768a92123"),
			"name" : "赵六",
			"sex" : "m",
			"age" : 19,
			"score" : 99,
			"address" : "HuNan"
	}
	{
			"_id" : ObjectId("582fd1df0f537b6768a92124"),
			"name" : "王超",
			"sex" : "m",
			"age" : 20,
			"score" : 99,
			"address" : "GuangDong"
	}
	{
			"_id" : ObjectId("582fd1e00f537b6768a92125"),
			"name" : "马汉",
			"sex" : "m",
			"age" : 22,
			"score" : 99,
			"address" : "HuBei"
	}
	>

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值