Mongodb基本操作

mongodb的官方文档请查看:https://docs.mongodb.com/manual/reference/update-methods/

1.db.getCollection('二手房').find({},{province:1}) (投影,只取province这个字段)

 

image.png

2.db.getCollection('二手房').find({},{province:1}).forEach(function(item){
db.getCollection('测试表1').save(item)
}) (取出想要的字段,然后保存在不同的表中)

 

image.png

3.db.getCollection('二手房').find({},{area:1,unit_price:1,})
.forEach(function(row){
area = row.area
unit_price = row.unit_price
area = area.replace('平米','');
unit_price = unit_price.replace('元/平米','');
row.area = area
row.unit_price = unit_price
db.getCollection('新表2').save(row);

}) (把字段中的文字替换为空再插入例外一张表)

image.png

4.db.getCollection('二手房').find({})
.forEach(function(item){
item.area = parseFloat(item.area);
item.unit_price = parseFloat(item.unit_price);
item.attention = parseFloat(item.attention);
sees = String(item.sees);
print(sees);
sees = sees.replace(' 共','');
print(sees);
item.sees = parseFloat(sees);
item.total_price = parseFloat(item.total_price);
db.getCollection('新表6').save(item);})

image.png

(把字符串转换成数字, parseFloat会保留小数点后面的,所以一般选择这个)
(注意,语言都有字符串转数字的功能,但是转换的时候第一个必须要是数字,要不就识别不了。如“你好121”就识别不了,但是"123你好"就可以识别。所以转换的时候可以先把开头不是数字的替换掉。

注意:mongodb里面无论是投影还是聚合,选中的都是含有那个字段的整个文档,所以那个字段里面的文档有那些字段,也可以对那些字段进行处理。如聚合中的求平均值,总和等。聚合分组就是把含有那个字段的文档分成一组,并不是仅仅把那个子段进行分组。是含有那个字段的文档(但是显示的时候是默认显示那个字段的),投影中不能用聚合表示式,比如$sum这些。投影一般是用来显示你想要的信息。

5.db.getCollection('新表6').aggregate([{group:{_id:"position",count:{sum:1},area_avg:{​avg:"area"}, sees_count:{​sum:"sees"}, attention_sum:{​sum:"attention"}, unit_price_avg:{​avg:"unit_price"}, total_price_avg:{​avg:"$total_price"},
}}])
(代码简书解析不了可以看截图)

image.png

 

  1.  

db.getCollection('新表6').aggregate([{group:{_id:"position",count:{sum:1},area_avg:{​avg:"area"}, sees_count:{​sum:"sees"}, attention_sum:{​sum:"attention"}, unit_price_avg:{​avg:"unit_price"}, total_price_avg:{​avg:"$total_price"},
}}]).forEach(function(item){
db.getCollection('汇总表').save(item)
})

image.png

  1.  

image.png

(想查看是否新增数据的时候要查找,或者不断地往下找,在上面看不了,增加的数据有新增的字段也要桌面连接工具解析到那个文档才看得到)

8.增加数据(也叫插入数据),数据格式必须是{}就是一个文档,若想增加多条数据那就用数组[](js里面这个叫数组,python里面这个叫列表 ),insert([{},{},{},{},{}])。
增加数据的还有两个方法:db.collection.insertOne():向指定集合中插入一条文档数据
db.collection.insertMany():向指定集合中插入多条文档数据
其实这个两个方法是对insert的拆分,只是让语意更清晰,让人读起来一下子就知道是插入多少条数据了。
db.getCollection('新表5').insert({name:"猪八戒",age:22,gender:"男"})

9.当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id,该属性用来作为文档的唯一标识(这个东西的主要作用是:当我们在开发环境导入数据到生产环境的时候,就不会怕数据库的数据会被重复,因为所有数据都是唯一的,独一无二的,那个_id你也可以自己调用objectid()生成)。你也可以自己设置那个_id但是要确保唯一性。

10.查询
db.getCollection('二手房').find({})
find({})或者find()都是表示查找所有集合中所有的文档
find({}) {}里面可以传入多个查询的限制条件,如find({age:"18",name:"xx"}),符合这个两个条件的文档才会显示。
find()查找的是集合中符合条件的所有文档,find()返回的是一个数组,不是对象 ,可以用下标[0]来取某第一个数据,依次类推。

findOne()用来查询集合中符合条件的第一个文档,返回的是一个对象。
find().count()查询所有文档的总数。

11.修改
db.getCollection('二手房').update(查询条件,新对象)
修改首先要传入两个参数,1.查询条件(即是查询要修改的对象)
updata默认的是把新对象替换旧对象,而不仅仅是替换属性,是全部替换。
set可以修改文档的指定属性。一般是用这个方法,来替换属性的值。 如:db.getCollection('新表2').update({"name" : "xx"},{​set:{age:22}})
$set这个是往文档中添加一个属性值。都是修改name等于xx的那个文档的属性值,并不是修改所有文档中的name。

db.getCollection('新表2').update({"name" : 22.0},{unset:{"name":1}})unset是删除文档中的属性值直接属性名name就可以了,后面那个随便写。这个也是修改name等于22.0的那个文档的属性值,并不是修改所有文档中的name

2.新对象(即是要把查询的对象修改为当前对象)。

image.png

mongodb的属性即是字段也是key,json格式中叫key,有多种叫法。

mongodb重要的概念就是文档,所有的操作都是围绕着文档。注意文档是一个一个的,并不是你在mongodb桌面连接工具上看到的那个文档。那个是集合(在关系型数据库里面就叫表,但是是两个不同的概念)。

12.删除
db.getCollection('新表2').remove({"name" : 22.0}) 默认删除符合条件的所有文档。
db.getCollection('新表2').remove({"name" : 22.0},ture) 传一个ture那只会删除一个,默认是删除多个。

db.getCollection('新表2').remove({})传一个空对象,那就把整个集合中的文档都删掉了。但是性能很差

image.png

image.png

image.png

image.png

 

13。往符合条件的文档设置一个属性

db.getCollection('新表6').updateMany({"province" : "广东"},{$set:{"number":1}})

 

14.对集合里面的多个字段进行分组,并计算相关的数值,结构化输出,并保存到例外一个集合中

 

db.getCollection('基础集合').aggregate([{$group:{_id:{position:"$position",name:"$name"},
count:{$sum:"$number"},
area_avg:{$avg:"$area"},
sees_count:{$sum:"$sees"},
attention_sum:{$sum:"$attention"},
unit_price_avg:{$avg:"$unit_price"},
total_price_avg:{$avg:"$total_price"},
}},

{$project:{position:"$_id.position",name:"$_id.name",count:"$count",
    area_avg:"$area_avg",sees_count:"$sees_count",attention_sum:"$attention_sum",
    unit_price_avg:"$unit_price_avg",
    total_price_avg:"$total_price_avg",
    }},
    
    ]).forEach(function(item){
        
        db.getCollection('汇总表6').insert(item)
        })

 

15.可以把字段改成中文,不过要注意子弹里面不能有英文符号,解析不了:

db.getCollection('基础集合').aggregate([{$group:{_id:{position:"$position",name:"$name"},
count:{$sum:"$number"},
area_avg:{$avg:"$area"},
sees_count:{$sum:"$sees"},
attention_sum:{$sum:"$attention"},
unit_price_avg:{$avg:"$unit_price"},
total_price_avg:{$avg:"$total_price"},
}},

{$project:{区域:"$_id.position",小区名字:"$_id.name",房子数量:"$count",
    参观次数:"$sees_count",关注人数:"$attention_sum",
    平均面积:"$area_avg",
    平均单价_元每平米:"$unit_price_avg",
    平均总价_万每套:"$total_price_avg",
    }},
    
    ]).forEach(function(item){
        
        db.getCollection('汇总表7').insert(item)
        })

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值