MongoDB 基础知识 (一)
一、Mongo的常用命令
1、配置的基础命令
(1)创建用户
db.createUser({
user: 'root',
pwd: 'root',
roles: [ "root" ]
});
(2)查看所有用户信息 show users
(3)查看当前的所有数据库 show databases
(4)查看当前的数据库 db
(5)切换数据库, 格式:use {数据库名}
2、插入数据
db.集合.insertOne(<JSON对象>) // 添加单个文档 db.集合.insertMany([{<JSON对象1>},{<JSON对象2>}]) // 批量添加文档 db.集合.insert() // 添加单个文档
insertOne, 和 insertMany命令不支持 explain命令;insert支持 explain命令;
插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为 _id。
(1)插入单条数据,格式:
db.{集合名}.insertOne(
doc,
{
writeConcern: 安全级别 // 可选字段
}
)
<1> writeConcern 定义了本次文档创建操作的安全写级别,决定一个写操作落到多少个节点上才算成功。 writeConcern的取值包括:
0: 发起写操作,不关心是否成功;
1-: 集群中最大数据节点数,写操作需要被复制到指定节点数才算成功;
majority: 写操作需要被复制到大多数节点上才算成功;
发起写操作的程序将阻塞到写操作到达指定的节点数为止;
例如:
db.members.insertOne({
name : "zhangsan",
age: 12,
sex : "m"
})
-
<2> 插入文档时,如果没有显示指定主键,MongoDB将默认创建一个主键,字段固定为_id, ObjectId() 可以快速生成的12字节id 作为主键,ObjectId 前四个字节代表了主键生成的时间,精确到秒。主键ID在客户端驱动生成,一定程度上代表了顺序性,但不保证顺序性, 可以通过ObjectId("id值").getTimestamp() 获取创建时间。
getTimestamp() 获取到的创建时间为0时区的,转为北京时间需要增加8小时。
(2)插入多条数据,格式:
db.{集合名}.insertMany(
[ {doc } , {doc }, ....],
{
writeConcern: doc,
ordered: true/false
}
)
ordered: 觉得是否按顺序进行写入;
顺序写入时,一旦遇到错误,便会退出,剩余的文档无论正确与否,都不会写入;
乱序写入时,则只要文档可以正确写入就会正确写入,不管前面的文档是否是错误的文档;
例如:
db.members.insertMany([
{ name: "lisi", age: 25, status: "A", tags: [ "blank", "red" ] },
{ name: "wangwu", age: 50, status: "A", tags: [ "red", "blank" ] }
],
{
ordered: true
}
);
3、查询数据
格式:
db.{集合名}.find({}) 查询所有的文档
db.{集合名}.find({}).pretty() 返回格式化后的文档
先插入数据
db.inventory.insertMany([
{ item: "journal", qty: 25, status: "A", size: { h: 14, w: 21, uom: "cm" }, tags: [ "blank", "red" ] },
{ item: "notebook", qty: 50, status: "A", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank" ] },
{ item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags:[ "red", "blank", "plain" ] },
{ item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
{ item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
]);
(1)精确查询
// 查询inventory集合中,status为"D"的文档
db.inventory.find( { status: "D" } )
// 查询inventory集合中,qty为0的文档
db.inventory.find( { qty: 0 } )
(2)多条件查询
// 查询inventory集合中,qty为并且status值为"D"的文档
db.inventory.find( { qty: 0, status: "D" } );
(3)嵌套对象精准查询
// 查询inventory集合中,size对象中的uom属性为"in"的文档
db.inventory.find( { "size.uom": "in" } );
(4)返回指定字段
// 查询inventory集合中的所有数据, 只返回item, status字段
db.inventory.find({ }, { item: 1, status: 1 } );
默认会返回_id 字段, 同样可以通过指定 _id:0 来不返回_id 字段;1 ----表示返回结果中包含指定属性字段; 0 ---表示返回结果中不包含指定属性字段;
注意:指定字段返回,要么全部指定为1,要么全部指定为0;(即要么全部指定为返回哪些字段,要么全部指定为不返回哪些字段)
(5)条件查询 and
// 查询inventory集合中,qty为45,并且status为"A"的文档
db.inventory.find({$and:[{qty:45},{status:"A"}]});
(6)条件查询 or
// 查询inventory集合中,qty为10,或者status为"A"的文档
db.inventory.find({$or:[{qty:10},{status:"A"}]})
Mongo查询条件和SQL查询对照表