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查询对照表

 

 

 

 

 

 

posted @ 2021-10-19 23:15  风止雨歇  阅读(123)  评论(0编辑  收藏  举报