MongoDB 编程笔记

2019-12-13  本文已影响0人  If_54ea
插入
use test
show collections
/*填写注释*/
db.stus.insert({name:"猪八戒",age:28,gender:"男"})
db.stus.insert([
    {name:"沙和尚",age:38,gender:"男"},    
    {name:"白骨精",age:16,gender:"女"},    
    {name:"蜘蛛精",age:14,gender:"女"}
])
db.stus.insert({_id:"85",name:"猪八戒",age:28,gender:"男"})  /* _id 具有唯一性 */
db.stus.find()
db.stus.find().pretty()

db.stus.insertOne() 用于插入一个文档对象

db.stus.insertMany() 用于插入多个文档对象

db.stus.insert() 既可以插入一个文档对象,又可以插入多个文档对象

//插入多条数据
for (var i=1;i<=100;i++)
{
    db.try.insert({num:i});
}
db.try.find()
db.try.find().count()

//另一种插入方法,更节省时间
var a=[];
for (var i=1;i<=100;i++)
{
    a.push({num:i});
}
db.try2.insert(a);
查询
 /*用于查询符合条件的第一个文档,find()返回一个数组,findOne()返回一个文档*/
 db.stus.find({age:28})
 db.stus.findOne({age:28}) 
 db.stus.find({age:28})[0]
 db.stus.find({age:28})[1]
 db.stus.find().count()   /*计算大小/长度*/
 db.stus.find().length()
 
 //第二个{}中表示结果只显示age属性,默认包括_id属性,若不需要可设置为{_id:0,age:1}
 db.stus.find({},{age:1})  

db.stus.find()能查询集合中所有的文档

修改
/*db.<collection>.update(查询条件,新对象)*/
db.stus.find()
db.stus.update({name:"沙和尚"},{age:28})db.stus.find()  
/*update默认使用新对象替换旧对象*/
//$set 修改/设置指定属性
//用_id来作为选择标准
//仅修改name属性,若不存在该属性则添加
db.stus.update(    
    {"_id" : ObjectId("5dd3aeb5a05414317760fb14")},
    {$set:{name:"沙和尚"}})
db.stus.find({"_id" : ObjectId("5dd3aeb5a05414317760fb14")})
db.stus.update(
    {"_id" : ObjectId("5dd3aeb5a05414317760fb14")},
    {$set:{
    gender:"男",
    address:"流沙河"
}})
db.stus.find({"_id" : ObjectId("5dd3aeb5a05414317760fb14")})
//$unset删除文档指定属性,address:"流沙河" 改写为address:1 同样有效
db.stus.update(
    {"_id" : ObjectId("5dd3aeb5a05414317760fb14")},     
    {$unset:{        
    address:"流沙河"    
    }})
db.stus.find({"_id" : ObjectId("5dd3aeb5a05414317760fb14")})
//对于多个符合查询要求的文档,update默认修改第一个
db.stus.find({name : "猪八戒"})
db.stus.update(
    {name : "猪八戒"},
    {$set:{    address:"高老庄"    
    }})
db.stus.find({name : "猪八戒"})
//updateMany可同时修改多个文档,updateOne仅修改一个文档
db.stus.updateMany(
    {name : "猪八戒"},     
    {$set:{    address:"高老庄"    
    }})
db.stus.find({name : "猪八戒"})
//使用update修改多个文档,增加multi属性,设置为true
db.stus.update(    
    {name : "猪八戒"},     
    {$set:{    address:"高老庄2"    }},    
    {multi:true})
db.stus.find({name : "猪八戒"})
db.stus.replace()  //用于替换
//$inc 在原来的值上增加,值为负数则直接在原来的值上减少
db.stus.update(        
    {"_id" : ObjectId("5dd3aeb5a05414317760fb14")},
    {$inc:{age:4}})

比较查询

//大于20
db.try.find({num:{$gt:20}})
/*
$gt:greater than
$gte:greater than or equal
$eq:equal
$lt:less than
$lte:less than or equal
*/
//大于40小于50
db.try.find({num:{$gt:40,$lt:50}})
//大于60或小于30
db.try.find({$or:[{num:{$gt:60}},{num:{$lt:30}} ]})
//查看前10条数据
db.try.find().limit(10)
//查看第11条到20条数据,skip用于跳过前n条数据
db.try.find().skip(10).limit(10)
//查看第21条到30条数据
db.try.find().skip(20).limit(10)

删除
db.stus.find()
db.stus.remove({_id:"85"})  //删除全部符合要求的文档
db.stus.find()
//db.stus.deleteOne() 删除一个,db.stus.deleteMany()删除多个
db.stus.remove({}) //删除全部文档
db.stus.remove({name : "猪八戒"},true) //删除第一个符合条件的文档

show collections
db.runoob.drop()  //删除集合

内嵌文档
db.col.insert({name:"one",hobby:["run","swim"]})
db.col.find()
db.col.insert({name:"two",hobby:{run:["5km","10km"],swim:["50m","100m"]}})
//mongoDB支持直接通过内嵌文档的属性来查询,属性名称必须加""
db.col.find({"hobby.swim":"100m"})
db.col.find({name:"two"})
//$push向数组中增加元素,$addToSet也具有同样功能,但若已存在增加项,则不会再次增加,而$push会重复增加
db.col.update({name:"two"},{$push:{"hobby.run":"3km"}})
db.col.find({name:"two"})
db.col.update({name:"two"},{$push:{"hobby.run":"3km"}})  //重复增加
db.col.find({name:"two"})
db.col.update({name:"two"},{$addToSet:{"hobby.run":"20km"}})  //第一次增加
db.col.find({name:"two"})
db.col.update({name:"two"},{$addToSet:{"hobby.run":"20km"}}) //第二次,已存在20km,则不新增
db.col.find({name:"two"})

文档之间的关系

一对多,多对一,一对一,多对多

//一对一
db.wAndh.insert({ name:"w1", h:{name:"h1"}})
db.wAndh.find()
db.wAndh.insert({ name:"w2", h:{name:"h2"} }, { name:"w3", h:{name:"h3"} })
db.wAndh.find()
//一对多,属性变为数组模式["","",""]

//一对多
db.a.insert([{name:"a1"},{name:"a2"}])
db.a.find() 
//用id来确定这是xxx的属性
db.order.insert({list:["b1","b2","b3"],name_id:ObjectId("5dd4abb227fdc1871920499b") })
db.order.insert({list:["b4","b5","b3"],name_id:ObjectId("5dd4abb227fdc1871920499b") })
db.order.insert({list:["b4","b3"],name_id:ObjectId("5dd4abb227fdc1871920499c") })
db.order.find()
//查找a的b
var a_id = db.a.findOne({name:"a2"})._id; //将a中a1的id值取出来db.order.find({name_id:a_id});

//多对多
db.a.drop()
db.a.insert([{name:"a1"},{name:"a2"},{name:"a3"}])
db.a.find()
db.b.insert([
    {name:"b1",a_ids:[ObjectId("5dd4afe927fdc187192049a3"),                     
                      ObjectId("5dd4afe927fdc187192049a4")]},
    {name:"b2",a_ids:[ObjectId("5dd4afe927fdc187192049a3"),
                      ObjectId("5dd4afe927fdc187192049a4"),      
                      ObjectId("5dd4afe927fdc187192049a5")]}
    ])
db.b.find()

排序:

sort{a:1,b:-1} :先按照a的属性进行升序排列,然后在a排序后具有共同位置(a的值相等)时按照b的属性进行降序排列

limit skip sort 可按照任意顺序进行调用

上一篇下一篇

猜你喜欢

热点阅读