MongoDB
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。 它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。 Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
文档型数据库
、NoSQL 数据库
安装
下载地址:Download MongoDB Community Server
shell
shell
wget -P /tmp/ https://repo.mongodb.org/apt/ubuntu/dists/jammy/mongodb-org/6.0/multiverse/binary-amd64/mongodb-org-server_6.0.15_amd64.deb
sudo dpkg -i /tmp/mongodb-org-server_6.0.15_amd64.deb
sudo systemctl start mongod.service
systemctl status mongod.service
MongoDB Shell
下载地址:MongoDB Shell Downloadhttps://www.mongodb.com/try/download/shell
加载本地 JS
javascript
load("D:/test.js")
用户操作
创建用户
javascript
db.createUser({user: "twtool", pwd: "twtool", roles: ["root"]});
获取所有用户
sql
show users;
javascript
db.getUsers();
数据库操作
显示当前版本
javascript
db.version()
当前数据库
sql
db;
删除数据库
javascript
db.dropDatabase();
显示所有数据库
sql
show dbs;
show databases;
集合操作
创建集合
javascript
/**
* 创建集合选项
* @typedef {Object} Options
* @property {number} size - 设置集合数据大小
* @property {boolean} capped - 是否固定集合大小,当集合数据到达指定大小时,覆盖最早的数据
* @property {number} max - 设置集合最大文档数据
*/
/**
* @param {string} name 集合名
* @param {Options} options 创建选项
*/
db.createCollection(name, options);
删除集合
删除名为 name
的集合
javascript
db.name.drop();
查看当前数据库所有集合
sql
show collections;
javascript
db.getCollectionNames();
文档操作
添加文档
插入一条数据
javascript
db.name.insertOne({
name: "twtool"
});
往集合里一次性添加多条数据
javascript
db.name.insertMany([
{name: "twtool1"},
{name: "twtool2"},
{name: "twtool3"},
]);
查询操作
无条件查询
javascript
db.name.find();
比较查询
比较符 | 符号表示 | 说明 |
---|---|---|
$eq | = | 查询等与参数值的数据 |
$gt | > | 查询大于参数值的数据 |
$gte | >= | 查询大于等于参数值的数据 |
$lt | < | 查询小于参数值的数据 |
$lte | <= | 查询小于等于参数值的数据 |
$ne | != | 查询小于等于参数值的数据 |
$in | ∈ | 查询不在参数值列表中的数据 |
$nin | ∉ | 查询不在参数值列表中的数据 |
$eq
:
javascript
// { <field>: { $eq: <value> } }
db.name.find({"name": "twtool"});
db.name.find({"name": {$eq: "twtool"}});
$gt
:
javascript
// { <field>: { $gt: <value> } }
db.name.find({"name": {$gt: "twtool"}});
$gte
:
javascript
// { <field>: { $gte: <value> } }
db.name.find({"name": {$gt: "twtool"}});
$lt
:
javascript
// { <field>: { $lt: <value> } }
db.name.find({"name": {$gt: "twtool2"}});
$lte
:
javascript
// { <field>: { $lte: <value> } }
db.name.find({"name": {$gt: "twtool2"}});
$ne
:
javascript
// { <field>: { $ne: <value> } }
db.name.find({"name": {$ne: "twtool"}});
$in
:
javascript
// { field: { $in: [ <value1>, <value2> ... <valueN> ] } }
db.name.find({"name": {$in: ["twtool", "twtool3"]}});
$nin
:
javascript
// { field: { $nin: [ <value1>, <value2> ... <valueN> ] } }
db.name.find({"name": {$nin: ["twtool", "twtool3"]}});
逻辑查询
字段名 | 说明 |
---|---|
$and | 要求条件全部满足 |
$not | 要求不满足条件 |
$nor | 要求条件全部不满足 |
$or | 要求至少满足一个条件 |
$and
:
javascript
// { $and: [ { <expression1> }, { <expression2> } , ... , { <expressionN> } ] }
db.name.insertOne({
name: "twtool4",
age: 23
});
db.name.find({
$and: [
{name: {$eq: "twtool4"}},
{age: {$eq: 23}},
]
});
$not
:
javascript
// { field: { $not: { <operator-expression> } } }
db.name.find({
name: {$not: {$eq: "twtool4"}}
});
$nor
:
javascript
// { $nor: [ { <expression1> }, { <expression2> }, ... { <expressionN> } ] }
db.name.find({
$nor: [
{name: {$eq: "twtool"}},
{name: {$gte: "twtool3"}},
]
});
$or
:
javascript
// { $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }
db.name.find({
$or: [
{name: {$eq: "twtool"}},
{age: {$eq: 23}},
]
});
元素类型
字段名 | 说明 |
---|---|
$exists | 匹配具有指定字段的文档 |
$type | 如果字段为指定类型,则选择文档 |
$exists
:
javascript
// { field: { $exists: <boolean> } }
db.name.find({age: {$exists: true}});
javascript
// { field: { $type: <BSON type> } }
// { field: { $type: [ <BSON type1> , <BSON type2>, ... ] } }
字段排序
javascript
db.name.find().sort({name: 1}); // 升序
db.name.find().sort({name: -1}); // 降序
查询部分数据
javascript
db.name.find().skip(2).limit(1); // 等价于 MySQL 的 limit 2 1
db.name.find().skip(2);
db.name.find().limit(2);
bulkWrite 操作
javascript
let bulkOps = [
{
insertOne: {
document: {name: 'Alice', age: 25, grade: 'A'}
}
},
{
updateOne: {
filter: {_id: 2},
update: {$set: {name: 'Bob', grade: 'B'}},
upsert: true // 如果不存在则插入
}
},
{
replaceOne: {
filter: {_id: 3},
replacement: {_id: 3, name: 'Charlie', age: 30}
}
},
// ... 可以添加更多操作
];
// 执行 bulkWrite
collection.bulkWrite(bulkOps, function (err, result) {
if (err) throw err;
console.log('Bulk write succeeded. Inserted: ' + result.insertedCount);
console.log('Updated: ' + result.matchedCount);
console.log('Modified: ' + result.modifiedCount);
// ... 可以查看更多结果属性
});