MongoDB基础语法
图
Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

学习网站

菜鸟教程MongoDB

创建数据库

use DATABASE_NAME

当没有任何数据时show dbs无法查看到

创建集合

db.createCollection("user_info")

使用show collections查看集合

删除集合

db.collection.drop()

Robo3T操作

// 根据条件删除
db.getCollection('testEntity').remove({"_id" : ObjectId("645510f187330a37dc844055")})
// 添加一条数据
db.getCollection('testEntity').insert({"_id" : ObjectId("645510f187330a37dc844055")})

批量修改

db.getCollection('sw_school').update(
{'app_no':"7"}, //query
{$set:{'createDate': ISODate("2021-04-12T11:16:22.098+08:00")}},// update 
{multi:true,upsert:false} // 批量更新
)

模糊查询

criteria.and("name").regex(name);

db.getCollection('news_v2').find({"title" : {"$regex":"如果"}})

索引

查看索引

db.col.getIndexes()

创建索引

db.col.createIndex({"title":1})
db.col.createIndex({"title":1,"description":-1})

语法中 Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可

删除索引

删除集合所有索引
db.getCollection('chongqing').dropIndexes()

删除集合指定索引
db.getCollection('chongqing').dropIndex('索引名')

随机查询

$sample

db.answers.aggregate([
    { $sample: { size: 20 }}  
])  

3.2+版本中新增,类似于大数据中的“数据采样”方式,从input中随机选择N条documents,语法“{$sample: {size: }}”。如果N大于collection中总数据的5%,那么$sample将会执行collection扫描、sort,然后选择top N条文档;如果N小于5%,对于wiredTiger而言则会遍历collection并使用“伪随机”的方式选取N条文档,对于MMAPv1引擎则在_id索引上随机选取N条文档

关联过滤语句

db.sw_integral_user.aggregate([
    {$lookup:{
       from: "user_base_info",
       localField: "uid",
       foreignField: "_id",
       as: "user"
     }},
         {
      $unwind: "$user"
    },
    {$project:{ _id: 0, integralCount: 1, name:"$user.realname", "nick":"$user.info.name","mobile":"$user.mobile"}},
    {$sort: {integralCount: -1}}
])

结果

{
    "integralCount": NumberLong("1084"),
    "name": "李牧华",
    "nick": "李牧华",
    "mobile": "182857586xx"
}

批量更新

db.getCollection('sw_report_record').find({"reportStatus" : 6.0}).forEach(
   function(item){                
       db.getCollection('sw_report_record').update({"_id":item._id},{$set:{"reportStatus":5}})
   }
)

// 更新整型
db.getCollection('test_paper_question_bank').find({}).forEach(
   function(item){                
       db.getCollection('test_paper_question_bank').update({"_id":item._id},{$set:{"cityCode": NumberInt(520502)}})
   }
)

条件批量删除

db.recordChipScan.deleteMany({ "createTime": { $gt: ISODate("2023-05-06T16:44:33.005+08:00") } })

只查询某列值

db.user.find({},{'phone':1})