数据库操作
展示所有的数据库
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/