建网站建设,网站建设方案ppt,wordpress网页播放器,建设部网站一级开发资质文档连接: link
创建表 不需要创建表的语句#xff0c;当插入表的第一条语句时#xff0c;会隐式的创建表。 增
插入一条
db.people.insertOne({ user_id: bcd001, age: 45, status: A }
)插入多条
db.collection.insertMany([ document 1当插入表的第一条语句时会隐式的创建表。 增
插入一条
db.people.insertOne({ user_id: bcd001, age: 45, status: A }
)插入多条
db.collection.insertMany([ document 1 , document 2, ... ],{writeConcern: document,ordered: boolean}
)writeConcern 如果mongodb有多个节点这个writeConcern是说到底写几个节点再返回。写一个节点性能快写多个节点性能慢。 test db.people.insertOne(
... { user_id: bcd001, age: 45, status: A },
... {
... writeConcern:{w:majority,j:true,wtimeout:5000}
... }
... )
{acknowledged: true,insertedId: ObjectId(649be01774d3e265a2c00f74)
}参数说明w:majority”写的时候写大多数节点就返回j:true表示刷到磁盘之后在返回日志为false,计算结果为truewtimeout:5000快速失败熔断ordered:true多条情况下是否按顺序插入
js脚本批量新增 客户端就是一个js的控制台。 # 通过使用客户端的load()命令批量新增
# /mongodb/js/books.js是下面脚本的路径
test load(/mongodb/js/books.js);
true
test db.books.countDocuments();
500000var tags [nosql,mongodb,document,developer,popular];
var types [technology,sociality,travel,novel,literature];
var books[];
for(var i0;i500000;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: xxxi
};
books.push(book)
}
db.books.insertMany(books);help
db.help()
db.books.help()查
db.books.find()
db.books.find({tag:nosql})条件查询
SQLMQLa 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}}
查询逻辑
SQLMQLa 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]}}
正则表达式
## 使用正则表达式查找type包含 so 字符串的book
db.books.find({type:{$regex:so}})
## 或者
db.books.find({type:/so/})排序
# #指定按收藏数favCount降序返回
db.books.find({type:travel}).sort({favCount:-1})分页
db.books.find().skip(16).limit(8)数据量非常大的情况下避免使用分页因为还是会扫描前多少条。 test db.books.find({_id:{$gt: ObjectId(649be1ac74d3e265a2c00ff8)}}).limit(1)
[{_id: ObjectId(649be1ac74d3e265a2c00ff9),title: book-132,type: literature,tag: popular,favCount: 97,author: xxx132}
]聚合函数
count 避免这种查询这种也会扫描全部 # 为了计算总页数而进行的 count() 往往是拖慢页面整体加载速度的原因
db.coll.count({x: 100});改
db.collection.updateOne()
db.collection.updateMany()db.collection.updateOne(
filter,
update,{upsert: boolean,writeConcern: document,collation: document,arrayFilters: [ filterdocument1, ... ],hint: document|string // Available starting in MongoDB 4.2.1}
)参数说明
参数值filter一个筛选器对象用于指定要更新的文档。只有与筛选器对象匹配的第一个文档才会被更新。update一个更新操作对象用于指定如何更新文档。可以使用一些操作符例如 s e t 、 set、 set、inc、$unset等以更新文档中的特定字段upsert一个布尔值用于指定如果找不到与筛选器匹配的文档时是否应插入一个新文档。如果upsert为true则会插入一个新文档。默认值为false。writeConcern一个文档用于指定写入操作的安全级别。可以指定写入操作需要到达的节点数或等待写入操作的时间。collation一个文档用于指定用于查询的排序规则。例如可以通过指定locale属性来指定语言环境从而实现基于区域设置的排序arrayFilters一个数组用于指定要更新的数组元素。数组元素是通过使用更新操作符 [ ] 和 []和 []和来指定的。hint一个文档或字符串用于指定查询使用的索引。该参数仅在MongoDB 4.2.1及以上版本中可用。
update的操作符
操作符格式描述$set{$set:{field:value}}指定一个键并更新值若键不存在则创建$unset{$unset : {field : 1 }}删除一个键$inc{$inc : {field : value } }对数值类型进行增减$rename{$rename : {old_field_name :new_field_name } }修改字段名称$push{ $push : {field : value } }将数值追加到数组中若数组不存在则会进行初始化$pushAll{$pushAll : {field : value_array}}追加多个值到一个数组字段内$pull{$pull : {field : _value } }从数组中删除指定的元素$addToSet{$addToSet : {field : value } }添加元素到数组中具有排重功能$pop{$pop : {field : 1 }}删除数组的第一个或最后一个元素 test db.books.find({_id:{$gt: ObjectId(649be1ac74d3e265a2c00ff8)}}).limit(1)
[{_id: ObjectId(649be1ac74d3e265a2c00ff9),title: book-132,type: literature,tag: popular,favCount: 98,author: xxx132}
]
test db.books.updateOne(
... {title:my book},
... {$set:{tags:[nosql,mongodb],type:none,author:fox}},
... {upsert:true}
... )
{acknowledged: true,insertedId: ObjectId(649bf00ce9b03ae08c3a971e),matchedCount: 0,modifiedCount: 0,upsertedCount: 1
}
更新多个
# 插入的时间统一以零时区为准存在多个地区多个节点的情况下如果以各自时区为准会乱套。
db.books.updateMany({type:novel},{$set:{publishedDate:new Date()}})findAndModify 先查再返回。类似并发的getAndIncreament();返回旧值 # 将某个book文档的收藏数favCount加1
db.books.findAndModify({query:{_id:ObjectId(642ec31813bdda928a1ea2a8)},update:{$inc:{favCount:1}}
})默认情况下findAndModify会返回修改前的“旧”数据。如果希望返回修改后的数据则可以指定 new选项 db.books.findAndModify({query:{_id:ObjectId(642ec31813bdda928a1ea2a8)},update:{$inc:{favCount:1}},new:true
})删
# 删除一个
db.books.deleteOne ({ type:novel })
# 删除集合下全部文档 ,不如直接drop性能快
db.books.deleteMany ({})
# 删除 type等于 novel 的全部文档
db.books.deleteMany ({ type:novel }) findOneAndDelete 可以实现队列某些场景下可以实现一个队列。 db.books.findOneAndDelete({type:novel})批量操作
db.pizzas.insertMany( [
{ _id: 0, type: pepperoni, size: small, price: 4 },
{ _id: 1, type: cheese, size: medium, price: 7 },
{ _id: 2, type: vegan, size: large, price: 8 }
] )db.pizzas.bulkWrite( [
{ insertOne: { document: { _id: 3, type: beef, size: medium, price: 6 } } },
{ insertOne: { document: { _id: 4, type: sausage, size: large, price: 10 } }
},
{ updateOne: {
filter: { type: cheese },
update: { $set: { price: 8 } }
} },
{ deleteOne: { filter: { type: pepperoni} } },
{ replaceOne: {
filter: { type: vegan },
replacement: { type: tofu, size: small, price: 4 }
} }
] )