Skip to content

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"},
]);

查询操作

Query Selectors

无条件查询
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}});

$type:

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);
    // ... 可以查看更多结果属性  
});