MongoDB - 文档基本操作 - 增删改查
-
创建
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属性,所以数据库为文档自动添加了_idfield(域) ,并且值类型是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); }
-

浙公网安备 33010602011771号