MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎。
连接MongoDB
mongo‐‐host
‐‐port

添加数据并不需要像mysql一样,必须要先创建表
插入单条数据
db.集合.insertOne(
)
示例:
db.member.insertOne({"name":"张三","age":18,"create":new Date()})
db.member.insert({"name":"李四1","age":18,"create":new Date()})

主键ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性,可以通过ObjectId(“id值”).getTimestamp() 获取创建时间。
db.member.insertOne({"_id":1,"name":"张三","age":18,"create":new Date()})

acknowledged : true,标识插入成功
insertedId:返回创建的id
json数组插入多条数据
db.member.insertMany([{"_id":2,"name":"李四","age":18,"create":new Date()},{"_id":3,"name":"王五","age":18,"create":new Date()}])

脚本的方式插入多条数据
var names = ['张一','张二'];
var members = [];
var member ={};
for(var i=0;i<2;i++){
var member ={name:names[i],"age":[i],"create":new Date()};
members.push(member);
};
db.member.insertMany(members);

db.集合名.find()
例如查询:member集合中所有数据
db.member.find()
在mongo shell中默认显示20条数据,输入it命令读取下一批;当在Navicat中会一次性返回;


注意find查询条件中是一个对象
db.member.find({age:18});

db.member.find({_id :{$gt: 2}, age:18});

sort中对象的值
db.member.find({_id :{$gt: 2}}).sort({_id:-1});

skip:跳过指定记录数
limit:返回结果数量
db.member.find().skip(1).limit(5);
跳过第1条,一共查询3条数据

0代表不显示,1代表显示。
注意:_id默认是显示的,只有_id不显示是设置0,其他字段都不可以设置0
find({查询条件,可以空},{显示的字段:1})

| mongo操作符 | 描述 | 对比mysql |
|---|---|---|
| $eq | 等值比较,find({_id :{ $eq: 1}}) 等价于 find({_id : 1}) | id = 1 |
| $ne | 不等于指定值,find({_id :{ $ne: 1}}) | id != 1 或 id<> 1 |
| $in | 数组中包含 ,find( { _id :{ $in: [ 1,2 ] } } ) | id in ( 1,2 ) |
| $nin | 数组中不包含,find( { _id :{ $nin: [ 1,2 ] } } ) | id not in ( 1,2 ) |
| $gt | 大于指定值,find({_id :{$gt: 1}}) | id > 1 |
| $get | 大于等于指定值,find({_id :{$gte: 1}}) | id >= 1 |
| $lt | 小于指定值,find({_id :{$lt: 1}}) | id < 1 |
| $lte | 小于等于指定值,find({_id :{$lte: 1}}) | id <= 1 |
| $and | 与(并且)查询,find({$and:[ { _id:{ $gt:1} },{ _id:{ $lt:4} } ]}) | id > 1 and id < 4 |
| $or | 或查询,find({$or:[ { _id:1 },{ _id: 3} ]}) | id = 1 or id= 3 |
| $not | 非查询,非小于3的数据 find({_id :{$not :{ $lt: 3 } } }) | id >= 3 |
| $nor | 即非查询,find( { $nor: [ { _id: 1 }, { _id: 2 }, { _id: 3 }] } ) | (id != 1 and id !=2 and id !=3) |
| $all | 同时包含,查询tag同时包含3和9的数据,tag是一个数组,find({tag:{$all:[3,9]}}),可查看下面示例 | 无 |
| $elemMatch | 有一个元素匹配即可,find({job:{$elemMatch:{city:‘beijing’,company:‘xiaomi’}}}),可查看下面示例 | 无 |
| $size | 匹配数组大小,find({tag:{$size:3}}),可查看下面示例 | 无 |
| $slice | 返回数组中第几个元素,find({job:{KaTeX parse error: Expected 'EOF', got '}' at position 43: …ompany:'baidu'}}̲},{name:1,job:{slice:1}}),可查看下面示例 | 无 |
$all查询
db.member.insertMany([{name:"A",tag:[1,2,3],age:18},{name:"B",tag:[3,5,9],age:19}]);
db.member.find({tag:{$all:[3,9]}})

$elemMatch查询
匹配嵌套数组中至少有一个对象完全匹配
db.member.insertMany([{name:"C",job:[{city:"beijing",company:'baidu'},{city:"shenzhen",company:'huawei'}],age:18},{name:"D",job:[{city:"beijing",company:'xiaomi'}],age:19}])
db.member.find({job:{$elemMatch:{city:'beijing',company:'baidu'}}})
db.member.find({job:{$elemMatch:{city:'beijing',company:'huawei'}}})
db.member.find({job:{$elemMatch:{city:'beijing',company:'xiaomi'}}})

$size,匹配嵌套的数组大小

$slice

db.集合.update(query, update, options)
参数说明
操作符
| 操作符 | 格式 | 描述 |
|---|---|---|
| $set | { $set : { filed : value} } | 指定一个键,并更新值 |
| $unset | { $unset : { filed : 1} } | 删除一个键 |
| $inc | { $inc : { filed : value} } | 对数值类型进行增减 |
| $push | { $push : { filed : value} } | 将数值追加到数组中,若数组不存在则会进行初始化 |
| $pushAll | { $pushAll : { filed : value_array} } | 追加多个值到数组内 |
| $pull | { $pull : { filed : value} } | 从数组中删除指定元素 |
| $addToSet | { $addToSet : { filed : value} } | 添加元素到数组中,具有排重功能 |
| $pop | { $pop : { filed : 1} } | 删除数组第一个或最后一个 |
| $rename | { $rename : { old_filed_name : new_filed_name } } | 修改地段名称 |
| $bit | { $bit : { filed : {and :5} } } | 位操作,integer类型 |
更新_id等于3的名字
db.member.update({_id:3},{$set:{name:‘张五1’}})
db.member.updateOne({_id:3},{$set:{name:‘张五1’}})

更新多个文档需要设置 multi选项 :true,默认情况下mongo update命令在更新第一个文档后就返回。
db.member.update({age:19},{$set:{ name:‘zhang1’}},{‘multi’:true});
db.member.updateMany({age:19},{$set:{ name:‘zhang33’}})

upsert选项为true:如果更新文档不存在则创建文档,如果文档存在字段不存在则创建字段,都存在则更新
db.member.update({_id:3}, { $set:{ address :‘北京’} } ,{upsert:true})

查询并修改指定值,注意先返回结果,后更新,返回的结果是旧数据
db.member.findAndModify({query:{name:‘张1’} , update:{ $set:{ ‘age’:18 } } })

查询并修改指定值,并返回新值
db.member.findAndModify({query:{name:‘张1’} , update:{ $set:{ ‘age’:18 } } })

db.member.deleteOne({_id:2})

remove命令会删除匹配条件的全部文档,删除单个文档,可以根据_id 或者唯一值删除。
db.member.remove({name:‘张1’})

如果希望明确删除一个文档,需要指定justOne参数
db.member.remove({age:19},true)

db.member.remove({age:19})
或
db.member.deleteMany({age:19})

db.member.remove({})
或
db.member.deleteMany({})
或
db.member.drop()
remove与deleteMany是对查询范围内的数据逐条删除,drop是删除整个集合(包括全部索引)drop更高效
remove和deleteMany只能按照默认顺序删除,并返回确认信息。findOneAndDelete可以指定顺序删除文档和返回删除的内容
删除并返回
db.member.findOneAndDelete({age:18})

删除指定排序的数据
db.member.findOneAndDelete({age:18},{sort:{_id:-1}})
