MongoDB常用命令

数据库操作

展示所有的数据库

show dbs;

查看当前数据库

db;

创建或切换到test数据库

use test;

删除数据库

db.dropDatabase();

更多命令,可查看帮助

db.help();

集合操作

展示当前数据库下的所有集合

show collections;

创建

db.createCollection(name, options);
// options为选填,可以制定其大小以及文档个数。例如创建一个user集合
db.createCollection("user");

删除

db.collection.drop();
db.user.drop();

文档操作

添加

添加单个

db.inventory.insertOne(
   { _id:1,item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" } }
);

添加多个

db.inventory.insertMany([
   { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } },
   { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } },
   { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } }
]);

添加一个或多个通用语法

db.collection.insert();

注:不指定_id字段时,mongdb会自动生成对象类型的id。

查询

查询一个集合中所有的文档

db.inventory.find( {} );

该查询类似关系型数据库中:select * from inventory;

等值条件查询

db.inventory.find( { status: "D" } );

该查询等同关系型数据库中:select * from inventory where status = "D";

in查询

db.inventory.find( { status: { $in: [ "A", "D" ] } } );

and查询

db.inventory.find( { status: "A", qty: { $lt: 30 } } );

or查询

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } );

and or 同时查询

db.inventory.find( {
     status: "A",
     $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]
} );

该操作等同于关系型数据库中:SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%");

按照值的顺序进行匹配

db.inventory.find( { tags: ["red", "blank"] } );

只匹配值,忽略值的顺序

db.inventory.find( { tags: { $all: ["red", "blank"] } } );

null或不存在字段查询

// 先插入需用的样例数据
db.inventory.insertMany([
   { _id: 1, item: null },
   { _id: 2 }
]);
显示_id:1的数据
db.inventory.find( { item : { $type: 10 } } );
显示_id:2的数据
db.inventory.find( { item : { $exists: false } } );

查询指定字段

// item和status显示,不显示_id字段:1显示,0不显示
db.inventory.find( { status: "A" }, { item: 1, status: 1, _id: 0 } )
The operation corresponds to the following SQL statement:
SELECT item, status from inventory WHERE status = "A";

大于、小于查询

// 查询数量大于15小于20的库存文档,如果是闭区间gte,lte
db.inventory.find( { qyt: { $gt: 15, $lt: 20 } } );
db.inventory.find( { qyt: { $elemMatch: { $gt: 15, $lt: 20 } } } );

时间范围查询

db.inventory.find( { 
createTime: {
            $gt: ISODate("2021-06-09T12:00:19.000Z"),
            $lte: ISODate("2021-06-09T12:10:58.000Z")
        });

分组聚合查询

db.user.aggregate(
    {"$match":{"channel":"online"}},
    {"$group":{"_id":"$address.cityName","count":{"$sum":1}}})
{"$group":{"_id":{ $dateToString: { format: "%Y-%m-%d", date: "createTime" }},"count":{"$sum":1}}},
        { "$sort" : { "_id": 1 }});

正则查询

//某个字段中包含某个字符
db.getCollection(‘news‘).find({"title": /^.*AD87*.$/})
// options为i是否区分大小写
db.users.find({ "name" : { $regex : "web", $options: "i" } })

嵌套文档查询

//插入需用的样例数据
db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 15 } ] },
   { item: "planner", instock: [ { warehouse: "A", qty: 40 }, { warehouse: "B", qty: 5 } ] },
   { item: "postcard", instock: [ { warehouse: "B", qty: 15 }, { warehouse: "C", qty: 35 } ] }
]);
//有结果
db.inventory.find( { "instock": { warehouse: "A", qty: 5 } } ) ;
// 无结果
db.inventory.find( { "instock": { qty: 5, warehouse: "A" } } ) ;

查询出的时间字段需要打印导出时,日期格式化函数:

function dateToString(datetime) {
        var year = datetime.getFullYear();
        var month = datetime.getMonth() + 1 < 10 ? "0" + (datetime.getMonth() + 1) : datetime.getMonth() + 1;
        var date = datetime.getDate() < 10 ? "0" + datetime.getDate() : datetime.getDate();
        var hour = datetime.getHours()< 10 ? "0" + datetime.getHours() : datetime.getHours();
        var minute = datetime.getMinutes()< 10 ? "0" + datetime.getMinutes() : datetime.getMinutes();
        var second = datetime.getSeconds()< 10 ? "0" + datetime.getSeconds() : datetime.getSeconds();
        return year + "-" + month + "-" + date+" "+hour+":"+minute+":"+second;
}

修改

单个修改

db.students.updateOne( { _id: 3 }, { $set: { "test3": 98, modified: "$$NOW"} } );

批量修改

db.members.updateMany(
   { },
   [
      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },
      { $unset: [ "misc1", "misc2" ] }
   ]
);

单个或多个修改

//multi:true批量修改,反之只修改匹配到的第一个
db.order.update( 
    {"success":true} ,
    {$set: {"orderStatus":  "FINISHED" }},
    {multi:true}
    );

嵌套文档更新

db.order.update(
    {'items.status': "SUCCESS"},
    {$set:{'items.$[t].orderStatus':'F'}},
    {
        arrayFilters:[{
            't.orderStatus': "SUCCESS",
        }],
        multi:true}
    );

从4.2开始支持聚合更新

db.collection.updateMany(
   <query>,
   [
      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ] } },
      { $unset: [ "misc1", "misc2" ] }
   ]
   ...
);
db.students2.updateMany( {},
  [
    { $replaceRoot: { newRoot:
       { $mergeObjects: [ { quiz1: 0, quiz2: 0, test1: 0, test2: 0 }, "$$ROOT" ] }
    } },
    { $set: { modified: "$$NOW"}  }
  ]
);

删除

db.inventory.deleteOne({_id:1});
db.inventory.deleteMany({ item : /p/ });
//删除所有的document
db.inventory.deleteMany({});

更多操作可查询官网:https://docs.mongodb.com/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容