-
创建
1.1:向集合中添加一个文档:
db.collection_name.insertOne()
-
db.Animals.insertOne({ name: "pig", age: 3, tags: ["black", "white"], size: {height:13, weight:20.12} })
1.2:向集合中添加多个文档:
db.collection_name.insertMany()
-
db.Animals.insertMany([ {name: "dog", age:1, tags: ["black"], size:{ height:10, weight:15} }, {name: "bee", age:9, tags: ["yellow"], size:{ height:20.1, weight:25.2} }, {name: "rabbit", age:5, tags: ["white"], size:{ height:30.3, weight:35} } ])
-
-
查询
2.1:查看指定集合内的所有的数据:
db.collection_name.find()
。(返回一个数组)-
如果数据过多查看不方便,可以使用
db.collection_name.find().pretty()
命令来调整格式。 -
我们在上面操作的时候,往
Animals
(即collection
)中插入了数据(即document
文档)。 因为没有给文档指定_id
属性,所以数据库为文档自动添加了_id
field(域) ,并且值类型是ObjectId(blablabla)
(即文档的唯一标识,类似于MySQL中的primary key
)。 -
MongoDB中的数字, 默认情况下是 double 类型。如果存整型, 必须使用函数
NumberInt(整型数字)
。
2.2:查询指定集合集合中第一个文档:
db.collection_name.findOne()
。(返回一个对象)2.3:
$in
:查询满足$in:[]
里面任意一个元素的数据;如果有多个查询条件,则用逗号分开。(只能查询单值)-
命令:
db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})
-
Eg:
// db.Animals.find( { age: { $in: [ 1, 3 ] } } ) // or: // db.Animals.find( { age: { $in: [ 3,1 ] } } ) db.Animals.find( { age: { $in: [ 1,3 ] } } )
2.4:
$or
:查询满足$or:[]
中任意一个字段的数据。-
命令:
db.collection_name.find({$or: [{key1: value1}, {key2: value2},{...}, ...]})
-
Eg:
// db.Animals.find({$or: [{age: 1}, {name: "pig"}]}) db.Animals.find({ $or: [{age: 1}, {name: "pig"}] })
2.5:
$all
:查询同时满足$all:[]
中所有元素的数据。-
命令:
db.collection_name.find( { key: { $all:["value1" , "value2",.. ] } } ).pretty()
-
Eg:
db.Animals.find( { tags: { $all:["white" , "black" ] } } ).pretty()
2.6:分页查询:使用
limit
关键字。- Eg:
db.Animals.find().limit(2)
(查询Animals
集合中的前2条记录) 。
2.7:find() + skip() + limit() 方法。
- Eg:
db.Animals.find().skip(1).limit(3)
(查询第2页的3条记录,结合skip()方法,skip(x)是跳过前x条记录)。
-
修改
-
常用修改器:为
$set
(赋值)和$unset
(取消赋值)。 -
修改指定字段的值,使用
Update()
方法修改field对应数据的其他内容。Eg:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}})
,修改成功如下图所示。注意:update()方法更新时只会更新一个文档,就是说,如果同时存在多条匹配的数据,默认只修改第一条;如果需要修改所有符合条件的数据,则需要写成:db.Animals.update({name:"pig"},{$set:{tags:["white","grey"]}},{multi:true})
-
$inc
修改器:对某列值进行加或减操作。-
Eg:
db.Animals.update({ "_id": ObjectId("61841ca6f46f59630e817360") }, { $inc: { "age":-2 }})
。(Animals集合中对应该id的数据中,age减去2)
-
-
如果修改一条不存在的数据不会报错,会给出未修改的信息
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
。-
Eg:
db.Animals.update({age:100},{age:100,name:"pig"})
。
-
-
-
删除
-
删除集合内所有数据。
-
Eg:
db.Animals.remove({})
(删除Animals集合中所有数据)。 -
Eg:
db.Animals.remove({age:1})
(集合中所有满足age:1
的数据都会被删除。)
-
-
删除单个文档:
db.collection.deleteOne()
。 -
从数据库中删除一个集合:
db.collection_name.drop()
。 -
删除数据库:
db.dropDatabase()
。 -
删除所有匹配的文档。
- Eg:
db.Animals.deleteMany( { gender : { $lt : 50 } } )
- Eg:
-
PS:一般数据库中的数据都不会真正意义上的删除,会添加一个字段来表示这个数据是否被删除。
-
-
排序
-
查询排序:在查询文档内容的时候, 默认是按照
_id
排序。 -
升序排序:
db.Animals.find().sort({age:1})
。( 根据age的值进行升序排序) -
降序排序:
db.Animals.find().sort({age:-1})
。(根据age的值进行降序排序)
-
-
投影
-
作用:指定查询字段。(有时我们对文档进行查询并不是需要所有字段, 比如只需要用到id的情况,这时候我们可以对文档进行投影)
-
语法:
db.collection_name.find(option_query,{key1:1, key2:0, ...})
。(key表示要查询/隐藏的字段。key为1表示显示该字段,key为0表示隐藏该字段) -
Eg:
db.Animals.find({},{"age":1, _id:0})
。-
该语句表示:用投影查询集合中所有文档的
age
字段。 -
_id
为0表示隐藏_id
字段,因为在执行find()
方法时_id
字段是始终显示的。
-
-
-
异常捕捉处理:
try catch
。-
如果某条数据插入失败, 将会终止插入, 但已经插入成功的数据不会回滚掉。所以批量插入由于数据较多容易出现失败。解决办法: 用
try catch
进行异常捕捉处理,测试的时候可以不处理。 -
语法:
try { code…… } catch (e) { print (e); }
-