数据操作;
一些主要的函数(以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"
}
>
MongoDB数据库操作
最新推荐文章于 2024-07-15 14:49:22 发布