mongoDB基础命令

一、官方文档

官网:https://www.mongodb.com/
官方文档:https://docs.mongodb.com/manual/

二、基础命令

可查看官方文档中MongoDB CRUD Operations选项卡

插入
命令说明
db.collection.insert()可以插入多个也可以插入一个
db.collection.insertOne()只能插入一个
db.collection.insertMany()插入多个

注:insertOne、insertMany在3.2版本才新加的

// user表中插入单条数据
db.user.insert({name:'哈哈',age:10});
db.user.insert({name:'haha',age:10});
db.user.insert({name:'哈哈',age:10,sex:"男"});

// user表中插入多条数据
db.user.insert([
	{name:'哈哈1',age:11,sex:"男"},
	{name:'哈哈2',age:12,sex:"男"},
	{name:'哈哈3',age:13,sex:"男"}
]);

// 获取ID的方法
ObjectId();

// 可以指定ID,但是必须保证ID是唯一的
db.user.insert({_id:11,name:'指定ID',age:10,sex:"男"});

// 3.2版本后才支持
db.user.insertOne({name:'哈哈单个',age:10,sex:"男"});

// 3.2版本后才支持
db.user.insertMany([
	{name:'哈哈多个1',age:11,sex:"男"},
	{name:'哈哈多个2',age:12,sex:"男"},
	{name:'哈哈多个3',age:13,sex:"男"}
]);
查询
命令说明
db.collection.find()为查询所有满足条件的,返回集合
db.collection.findOne()为满足条件中的一条记录,返回单条记录
// 查看user表中所有数据
db.user.find();
// 通过指定ID获取数据
db.user.find({_id:11});
// 通过自动生成的ID获取数据
db.user.find({_id:ObjectId("5f1bee7a49cfef72580116a2")});
// 查询sex为男的记录
db.user.find({sex:"男"});
// 查询sex为男且age为10的记录
db.user.find({sex:"男",age:10});
// 返回集合中第一条记录,下标从0开始
db.user.find({sex:"男",age:10})[0];
// 直接返回name
db.user.find({sex:"男",age:10})[0].name;

// 只查询一条
db.user.findOne({sex:"男",age:10});
// 直接返回name
db.user.findOne({sex:"男",age:10}).name;

// 返回总的个数
db.user.find().count();
db.user.find({sex:"男",age:10}).count();
db.user.find().length();
db.user.find({sex:"男",age:10}).length();

// 查询sex为男,age为12的数据,并且只显示名字(0:不显示 1:显示),_id默认均会展示
db.user.find({sex:"男",age:12},{name:1,_id:0});
修改
命令说明
db.collection.update()默认为修改一条,新增multi:true属性,可以修改多个
db.collection.updateOne()修改一条
db.collection.updateMany()修改多条
db.collection.replaceOne()替换
// 将name为haha的age改为12(原为10),操作之后发现name等属性也都没有了,注:update默认为替换旧对象
db.user.update({name:"haha"},{age:12});
// 只修改指定字段[$set:需要修改的属性]
db.user.update({_id:ObjectId("5f1bee7a49cfef72580116a2")}, 
{
	$set:{name:"haha",sex:"女",test:"测试"}
});
// 只修改指定字段[$unset:需要删除的属性]
db.user.update({_id:ObjectId("5f1bee7a49cfef72580116a2")}, 
{
	$set:{name:"haha1",sex:"女"},
	$unset:{test: 0}
});
// update 只修改一个,若匹配到多个也只会修改一个
db.user.update({name:"哈哈"}, 
{
	$set:{sex:"女"}
});
// updateMany 修改多个
db.user.updateMany({name:"哈哈"}, 
{
	$set:{sex:"女1"}
});
// update 新增multi:true属性,可以修改多个
db.user.update({name:"哈哈"}, 
    { $set:{sex:"女"} },
    { multi:true }
);
// 修改一条
db.user.updateOne({name:"哈哈"}, 
{
	$set:{sex:"女1"}
});
// 替换(其他属性会清空)
db.user.replaceOne({_id:ObjectId("5f1bee7a49cfef72580116a2")},
{name:"haha"});
删除
命令说明
db.collection.remove()既可以删除多条,也可以删除单条,若只想删除一条,需要多传一个参数
db.collection.deleteOne()删除单条
db.collection.deleteMany()删除多条
// 删除ID为11的记录
db.user.remove({_id:11});
// 删除所有age为10的记录
db.user.remove({age:10});
// 只删除一条记录,匹配到多条也只会删除一条
db.user.remove({age:11},true);
// 删除所有(性能差,一个个删除)
db.user.remove({});
// 直接删除集合
db.user.drop()
其他(更详细的可参考官方文档)
  • 文档中保存文档
db.user.insert({
    name:"文档内包含文档01",
    age:15,
    hobby:{
        movie:["电影一","电影二","电影三"],
        city:["北京","上海","广州"]
    }
});
db.user.insert({
    name:"文档内包含文档02",
    age:15,
    hobby:{
        movie:["电影一","电影四","电影五"],
        city:["北京","深圳","广州"]
    }
});
  • 通过文档内文档的属性进行匹配查询
// 通过文档内文档中的属性进行匹配查询时,属性名需要加上双引号
// 属性名:值 不当可以匹配字符串,也可以匹配数组内的属性
db.user.find({"hobby.movie":"电影一"});
db.user.find({"hobby.movie":"电影二"});
  • 往文档内文档中数组属性新增一个元素
// push,允许重复,若多次执行则会插入多条记录
db.user.update({name:"文档内包含文档01"}, {
    $push:{"hobby.movie":"电影六"}
});
// addToSet,不允许重复,仅当元素不存在于集合中时才将它们添加到数组中
db.user.update({name:"文档内包含文档01"}, {
    $addToSet:{"hobby.movie":"电影六"}
});
  • 批量写入数据
// 批量写入100条数据(需要操作100次,性能差)
for (var i = 1; i <= 100; i++) {
    db.nums.insert({num:i});
}
// 将数据放入数组,只需要insert一次,即可(性能好)
var arr = [];
for (var i = 1; i <= 100; i++) {
    arr.push({num:i});
};
db.nums.insert(arr);
  • 测试比较查询
// 查询nums中num大于98的记录
db.nums.find({num:{$gt:98}});
// 查询nums中num大于等于98的记录
db.nums.find({num:{$gte:98}});
// 查询nums中num小于2的记录
db.nums.find({num:{$lt:2}});
// 查询nums中num小于等于2的记录
db.nums.find({num:{$lte:2}});

// 大于50,小于55
db.nums.find({num:{$gt:50,$lt:55}});

// 查询前十条记录,limit()最多显示多少行数据
db.nums.find().limit(10);
// 查询11-20条数据,skip()跳过指定数量的数据
db.nums.find().skip(10).limit(10);
// skip、limit、sort不需要区分前后,mongodb会自动调整顺序(sort->skip->limit)
// 可用于分页
// skip( (页码-1)*每页条数 ).limit( 每页条数 )

// 大于等于98或小于2
db.nums.find({
	$or:[{num:{$gte:98}},{num:{$lt:2}}]
});

// 将大于98的全部加上3
db.nums.updateMany({num:{$gt:98}},{
	$inc:{num:3}
});
  • 排序
// skip、limit、sort不需要区分前后,mongodb会自动调整顺序(sort->skip->limit)
// 根据num正序排列
db.nums.find().sort({num:1});
// 根据num倒序排列
db.nums.find().sort({num:-1});
// 根据num倒序,若num一致再根据aaa正序排列
db.nums.find().sort({num:-1,aaa:1});
官方文档篇(详细操作参考官网文档,以下均摘自官方文档)
Update Operators(修改操作)

可查看官方文档中Reference > Operators > pdate Operators选项卡
Fields

名称说明
$currentDate将字段的值设置为当前日期,即日期或时间戳。
$inc将字段的值增加指定的数量
$min仅当指定值小于现有字段值时才更新该字段。
$max仅当指定值大于现有字段值时才更新该字段
$mul将字段的值乘以指定的数量
$rename重命名字段
$set设置文档中字段的值
$setOnInsert如果更新导致插入文档,则设置字段的值。对修改现有文档的更新操作没有影响
$unset从文档中删除指定的字段

Array:数组

名称说明
$充当占位符,以更新与查询条件匹配的第一个元素
$[]充当占位符,以更新匹配查询条件的文档的数组中的所有元素
$[]充当占位符,以更新arrayFilters与查询条件匹配的文档中所有与条件匹配的元素
$addToSet仅当元素不存在于集合中时才将它们添加到数组中
$pop删除数组的第一项或最后一项
$pull删除与指定查询匹配的所有数组元素
$push将项目添加到数组
$pullAll从数组中删除所有匹配的值

Modifiers

名称说明
$each修改 p u s h 和 push和 pushaddToSet运算符以附加多个项以进行数组更新
$position修改$push运算符以指定要添加元素的数组中的位置
$slice修改$push运算符以限制更新数组的大小
$sort修改$push运算符以对存储在数组中的文档重新排序

Bitwise

名称说明
$bit执行按位AND,OR和XOR整数值的更新
Query and Projection Operators(查询和投影操作)

可查看官方文档中Reference > Operators > Query and Projection Operators选项卡
Comparison 比较

名称说明
$eq匹配等于指定值的值
$gt匹配大于指定值的值
$gte匹配大于或等于指定值的值
$in匹配数组中指定的任何值
$lt匹配小于指定值的值
$lte匹配小于或等于指定值的值
$ne匹配所有不等于指定值的值
$nin不匹配数组中指定的任何值

Logical 逻辑

名称说明
$and用逻辑联接查询子句AND将返回两个子句都符合条件的所有文档
$not反转查询表达式的效果,并返回与查询表达式不匹配的文档
$nor用逻辑联接查询子句NOR将返回两个子句均不匹配的所有文档
$or用逻辑联接查询子句OR将返回符合任一子句条件的所有文档

Element 元素

名称说明
$exists匹配具有指定字段的文档
$type如果字段是指定类型,则选择文档

Evaluation 评估

名称说明
$expr允许在查询语言中使用聚合表达式
$jsonSchema根据给定的JSON Schema验证文档
$mod对字段的值执行模运算并选择具有指定结果的文档
$regex选择值与指定的正则表达式匹配的文档
$text执行文本搜索
$where匹配满足JavaScript表达式的文档

Geospatial 地理空间

名称说明
$geoIntersects选择与GeoJSON几何形状相交的几何形状。该2dsphere索引支持 $geoIntersects
$geoWithin选择边界GeoJSON几何内的几何。该2dsphere和2D指标支持 $geoWithin
$near返回点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $near
$nearSphere返回球体上某个点附近的地理空间对象。需要地理空间索引。该2dsphere和2D指标支持 $nearSphere

Array 数组

名称说明
$all匹配包含查询中指定的所有元素的数组
$elemMatch如果array字段中的元素符合所有指定$elemMatch条件,则选择文档
$size如果数组字段为指定大小,则选择文档
按位

Bitwise 按位

名称说明
$bitsAllClear匹配数字或二进制值,其中一组位的所有值均为0
$bitsAllSet匹配数字或二进制值,其中一组位的所有值均为1
$bitsAnyClear匹配数值或二进制值,在这些数值或二进制值中,一组位位置中的任何位的值为0
$bitsAnySet匹配数值或二进制值,在这些数值或二进制值中,一组位位置中的任何位的值为1

Comments 注释

名称说明
$comment向查询谓词添加注释

Projection Operators 投影运算

名称说明
$在与查询条件匹配的数组中投影第一个元素
$elemMatch投影与指定$elemMatch条件匹配的数组中的第一个元素
$meta投影$text操作期间分配的文档分数
$slice限制从数组投影的元素数量。支持跳过和限制切片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值