MongoDB数据库基本操作

本文档详细介绍了MongoDB的基本操作,包括插入、更新、删除文档,查询文档的方法,如where、and、or语句,分页、排序,以及创建、查看和管理索引。还涵盖了聚合操作,如sum、avg、min、max等,以及聚合管道的使用。示例展示了如何查询状态为1且价格为空的文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB数据库基本操作

此总结来自菜鸟教程,如需更加详细或者其它分享请跳转菜鸟教程

1.插入文档

db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)

3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()

2.更新文档

(1)update() 方法
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern :可选,抛出异常的级别。
(2)save() 方法
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。

3.删除文档

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
  • writeConcern :(可选)抛出异常的级别。

4.查询文档

db.collection.find(query, projection)
  • query :可选,使用查询操作符指定查询条件
  • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

以下collection简称col,数据库名称

(1)Where 语句
db.col.find({key:value}) //等于
db.col.find({key:{$lt:<value>}}) //小于    lte:小于等于 ge:大于 gte:大于等于 ne:不等于

eg1

db.col.find({_id: ObjectId("idValue")}) //查询主键Id
db.col.find({field: {$exists: true}})  //查询字段(field)是否存在
(2)And语句
db.col.find({key1:value1, key2:value2})
(3)Or语句
db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
)
(4)And 和 Or语句
db.col.find({
key1: {$gt:<value>}, 
$or: [{key2: value2},{key3: value3}]
})
(5)分页Limit与跳过Skip方法
db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

如果没有指定limit()方法中的参数则显示集合中的所有数据。skip()方法默认参数为 0 。

(6)排序sort方法
db.COLLECTION_NAME.find().sort({KEY:<1或者-1>})

1 为升序排列,-1 是降序排列

5.索引

(1)创建索引
db.collection.createIndex({keys, <1或者-1>})

keys只可以创建多个索引字段,1 为指定按升序创建索引, -1 为降序来创建索引。

参数类型详情
backgroundBoolean建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
db.collection.createIndex({key1: 1, key2: 1}, {background: true})//创建工作在后台执行

1、查看集合索引

db.col.getIndexes()

2、查看集合索引大小

db.col.totalIndexSize()

3、删除集合所有索引

db.col.dropIndexes()

4、删除集合指定索引

db.col.dropIndex("索引名称")

6.聚合

聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

db.col.aggregate(AGGREGATE_OPERATION)
表达式描述实例
$sum计算总和。db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { s u m : " sum : " sum:"likes"}}}])
$avg计算平均值db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { a v g : " avg : " avg:"likes"}}}])
$min获取集合中所有文档对应值得最小值。db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m i n : " min : " min:"likes"}}}])
$max获取集合中所有文档对应值得最大值。db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m a x : " max : " max:"likes"}}}])
$push将值加入一个数组中,不会判断是否有重复的值。db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { p u s h : " push: " push:"url"}}}])
$addToSet将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { a d d T o S e t : " addToSet : " addToSet:"url"}}}])
$first根据资源文档的排序获取第一个文档数据。db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : { f i r s t : " first : " first:"url"}}}])
$last根据资源文档的排序获取最后一个文档数据db.col.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : { l a s t : " last : " last:"url"}}}])

以上操作_id : "$by_user"是指user字段映射到_id字段。_id是默认显示 ,可指定字段不显示0不显示 1显示

聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );//结果中就只还有_id,tilte和author三个字段,默认情况下_id字段是被包含的
  • m a t c h :用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。 match:用于过滤数据,只输出符合条件的文档。match使用MongoDB的标准查询操作。
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。

7.使用例子

展开详情文档,状态为1,价格为空

db.article.aggregate([
    {
        $unwind:"$details"
    },
    {
        $match: {
            "details.status": 1,
            "details.price": {$exists: false}
        }
    }
]);

eg2

db.col.aggregate([
    {$sort: {date: -1}},
    {$skip: 10}, //跳过前10个文档
    {$limit: 5}, //限制返回5个文档
    //其他聚合操作
])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值