关于MongoDB中如何做到对已有数据插入时更新字段,不存在时则插入新的Document

原创 2017年05月19日 09:13:41

背景需求:

 *  比如我们有这样一个需求,有两个excel中的数据,需要插入到数据库中,这个两个excel中的数据有些字段都是一样的,比如本例所写的,电台名称是一样的,省市县也是一样的,而不一样的是波段是调频(FM) 调幅(AM).  *  ` 

这里普及一下:AM 调幅,中波
FM 调频,微波
代表广播电台发射信号使用的技术和接收设备(收音机)接受的制式.
微波传输,信号质量高,传输成本低,发射功率小,覆盖范围小,受地理因素影响较大,一般作为城市广播的首选.比如你的家乡城市台,一般可以通过FM收听.
中波传输,信号质量稳定,传出成本大,发射功率大,覆盖范围广,靠天馈传输,受天气条件影响较大,一般作为远距离传输的首选.比如中国国际广播电台,中央人民广播电台等.`
所以需要将相同电台名称、省市县相同的FM和AM写为一条记录!这时便可以用到MongoDB的upsert操作!

 @Override
    public boolean saveRadioFrequencyDO(List<RadioFrequencyDO> radioFrequencyDO, String type) throws Exception {
        boolean flag = true;
        MongoConfiguration mongoConfiguration = new MongoConfiguration();
        mongoTemplate = mongoConfiguration.mongoTemplate();
        if (radioFrequencyDO != null) {
            for (int i = 0; i < radioFrequencyDO.size(); i++) {
                Query query = new Query();
                Update update = new Update();
//这些都是查询条件,用来判断数据库中有没有符合这些条件的记录!update方法会首先查找与第一个参数匹配的记录,在用第二个参数更新之,如果找不到与第一个参数匹配的的记录,就插入一条(upsert 的名字也很有趣是个混合体:update+insert)query.addCriteria(Criteria.where("radioName").is(radioFrequencyDO.get(i).getRadioName()));
                query.addCriteria(Criteria.where("province").is(radioFrequencyDO.get(i).getProvince()));
                query.addCriteria(Criteria.where("city").is(radioFrequencyDO.get(i).getCity()));
                query.addCriteria(Criteria.where("county").is(radioFrequencyDO.get(i).getCounty()));
                query.addCriteria(Criteria.where("transmittingPower").is(radioFrequencyDO.get(i).getTransmittingPower()));
                if (type != null && type.equals("AM")) {
                //如果有query相匹配的记录,则加入transmittingFrequencyOfAM这个字段,或者更新这个字段,如果找不到相匹配的,则直接重新插入一条记录,并且加入transmittingFrequencyOfAM这个字段
                    update.set("transmittingFrequencyOfAM", radioFrequencyDO.get(i).getTransmittingFrequencyOfAM());
                } else {
                    update.set("transmittingFrequencyOfFM", radioFrequencyDO.get(i).getTransmittingFrequencyOfFM());
                    update.set("launchPlat", radioFrequencyDO.get(i).getLaunchPlat());
                }
                mongoTemplate.upsert(query, update, RadioFrequencyDO.class);
            }
        } else {
            flag = false;
        }
        return flag;
    }
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liuzhigang828/article/details/72515928

mongodb不存在某个字段时,插入该字段

var time= new Date("2013/2/28"); db.biao.update({"date": { $exists: false }}, {$set: {"date": tim...
  • zwyjg
  • zwyjg
  • 2016-08-18 17:45:32
  • 2912

Mongodb中插入值为空的字段

Mongodb中使用关键字None表示空值
  • HelloJill
  • HelloJill
  • 2014-07-01 22:02:37
  • 555

mongodb 当数据存在时更新数据,数据不存在时插入数据

col.update(key, data, {upsert:true});
  • qq_26341621
  • qq_26341621
  • 2017-06-14 10:25:44
  • 716

mongodb在document存在时update不存在时save

通过mongoose的update和upsert:true实现。 http://w3stack.org/question/how-do-i-updateupsert-a-document-i...
  • SalmonellaVaccine
  • SalmonellaVaccine
  • 2015-12-24 23:05:26
  • 1452

MongodbTemplate的增删改操作

插入数据操作将参数转换成一个对象,直接调用insert方法即可: 举例:@Document(collection="student") public class Student { priva...
  • mazhen1991
  • mazhen1991
  • 2017-10-05 16:36:01
  • 690

MongoDB 批量添加记录中不存在的字段

MongoDB是基于分布式文件存储的数据库,与关系型数据库不同,记录中的字段数量可以各不相同。本文将介绍如何对MongoDB记录中不存在的字段进行批量添加并赋值。...
  • fdipzone
  • fdipzone
  • 2017-04-12 23:16:36
  • 14029

mongo查询某个字段是否存在,并删除记录里的这个字段

db.course.update({},{$unset:{"lectures.lectures_count":""}},{multi:true})
  • yuan882696yan
  • yuan882696yan
  • 2014-04-18 21:03:56
  • 45356

Spring Data MongoDB 四:基本文档修改(update)(一)

Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的update的操作,可以对在存储数...
  • congcong68
  • congcong68
  • 2015-08-08 12:31:27
  • 22679

[MongoDB]Update更新数据

Update操作只作用于集合中存在的文档。MongoDB提供了如下方法来更新集合中的文档: db.collection.update()db.collection.updateOne() New ...
  • SunnyYoona
  • SunnyYoona
  • 2016-09-02 23:26:36
  • 23748

Mongodb的集合插入一个字段

在mongodb的现有集合中增加一个字段: db.rules.update({"_id" : ObjectId("587e5e0e09a4670334208e88")},{"$set" : {"u"...
  • u014044812
  • u014044812
  • 2017-01-18 17:47:51
  • 6205
收藏助手
不良信息举报
您举报文章:关于MongoDB中如何做到对已有数据插入时更新字段,不存在时则插入新的Document
举报原因:
原因补充:

(最多只允许输入30个字)