目录

插入文档

新增单个文档

批量新增文档

测试:批量插入50条随机数据

文档查询

条件查询

指定条件查询

查询条件对照表

查询逻辑对照表

查询逻辑运算符

排序&分页

指定排序

分页查询

正则表达式匹配查询


插入文档

新增单个文档

db.collection.insert({"name":"fox"})

db.conllection.save()

db.collection.insertOne()

mongodb内嵌文档查询 mongodb查询文档操作_Math

writeConcern 决定一个写操作落到多少个节点上才算成功。

writeConcern 的取值包括:

  • 0:发起写操作,不关心是否成功;
  • 1~集群最大数据节点数:写操作需要被复制到指定节点数才算成功;
  • majority:写操作需要被复制到大多数节点上才算成功。

进入appdb

mongodb内嵌文档查询 mongodb查询文档操作_正则表达式_02

  •  insert:若插入的数据主键已经存在,则会抛 DuplicateKeyException 异常,提示主键重复,不保 存当前数据。
  • save: 如果 _id 主键存在则更新数据,如果不存在就插入数据。

mongodb内嵌文档查询 mongodb查询文档操作_mongodb_03

  •  insertOne()

mongodb内嵌文档查询 mongodb查询文档操作_mongodb_04

批量新增文档

db.collection.insertMany()

mongodb内嵌文档查询 mongodb查询文档操作_条件查询_05

  • writeConcern:写入策略,默认为 1,即要求确认写操作,0 是不要求。
  • ordered:指定是否按顺序写入,默认 true,按顺序写入。

mongodb内嵌文档查询 mongodb查询文档操作_mongodb_06

  • insert和save也可以实现批量插入(使用集合)

mongodb内嵌文档查询 mongodb查询文档操作_Math_07

测试:批量插入50条随机数据

编辑脚本book.js

var tags = ["nosql","mongodb","document","developer","popular"];
var types = ["technology","sociality","travel","novel","literature"];
var books=[];
for(var i=0;i<50;i++){
    var typeIdx = Math.floor(Math.random()*types.length);
    var tagIdx = Math.floor(Math.random()*tags.length);
    var favCount = Math.floor(Math.random()*100);
    var book = {
        title: "book-"+i,
        type: types[typeIdx],
        tag: tags[tagIdx],
        favCount: favCount,
        author: "xxx"+i
    };
    books.push(book)
}
db.books.insertMany(books);

先exit退出,后

mongodb内嵌文档查询 mongodb查询文档操作_正则表达式_08

db.books.find()

mongodb内嵌文档查询 mongodb查询文档操作_正则表达式_09

文档查询

使用find 查询集合中的若干文档。语法如下

db.collection.find(query,projection)
  • query : 可选,查询条件
  • projection : 可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参 数即可(默认省略)。 投影时,id为1的时候,其他字段必须是1;id是0的时候,其他字段可以是 0;如果没有_id字段约束,多个其他字段必须同为0或同为1。

查询novel类的文档

db.books.find({type:"novel"})

mongodb内嵌文档查询 mongodb查询文档操作_Math_10

 findOne查询集合中的第一个文档。

db.collection.findOne(query, projection)

mongodb内嵌文档查询 mongodb查询文档操作_mongodb_11

条件查询

指定条件查询

#查询带有nosql标签的book文档:
db.books.find({tag:"nosql"})
#按照id查询单个book文档:
db.books.find({_id:ObjectId("61caa09ee0782536660494d9")})
#查询分类为“travel”、收藏数超过60个的book文档:
db.books.find({type:"travel",favCount:{$gt:60}})

查询条件对照表

SQL

MQL

a = 1

{a: 1}

a <> 1

{a: {$ne: 1}}

a > 1

{a: {$gt: 1}}

a >= 1

{a: {$gte: 1}}

a < 1

{a: {$lt: 1}}

a <= 1

{a: {$lte: 1}}

mongodb内嵌文档查询 mongodb查询文档操作_mongodb_12

查询逻辑对照表

SQL

MQL

a = 1 AND b = 1

{a: 1,b: 1} 或 {$and: [{a: 1},{b: 1}]}

a = 1 OR b = 1

{$or: [{a: 1},{b: 1}]}

a IS NULL

{a: {$exists: false}}

a IN (1,2,3)

{a: {$in: [1, 2, 3]}}

查询逻辑运算符

  • $lt: 存在并小于
  • $lte: 存在并小于等于
  • $gt: 存在并大于
  • $gte: 存在并大于等于
  • $ne: 不存在或存在但不等于
  • $in: 存在并在指定数组中
  • $nin: 不存在或不在指定数组中
  • $or: 匹配两个或多个条件中的一个
  • $and: 匹配全部条件

排序&分页

指定排序

使用 sort() 方法对数据进行排序

#指定按收藏数(favCount)降序返回
db.books.find({type:"travel"}).sort({favCount:-1})

mongodb内嵌文档查询 mongodb查询文档操作_Math_13

分页查询

skip用于指定跳过记录数,limit则用于限定返回结果数量。可以在执行find命令的同时指定skip、limit 参数,以此实现分页的功能。

#跳过前八条,查看四条
db.books.find().skip(8).limit(4)

mongodb内嵌文档查询 mongodb查询文档操作_mongodb内嵌文档查询_14

正则表达式匹配查询

MongoDB 使用 $regex 操作符来设置匹配字符串的正则表达式。

//使用正则表达式查找type包含 so 字符串的book
db.books.find({type:{$regex:"so"}})
//或者
db.books.find({type:/so/})

mongodb内嵌文档查询 mongodb查询文档操作_Math_15