美文网首页
mongodb 的 IntelliShell 的简单操作

mongodb 的 IntelliShell 的简单操作

作者: 李小二的倔强 | 来源:发表于2019-03-26 17:45 被阅读0次

    向一个collections中添加一个字段

    道德三皇五帝,功名夏后商周,
    五霸七雄闹春秋,顷刻兴亡过手。
    青史几行名姓,北邙无数荒丘,
    前人田地后人收,说甚龙争虎斗。

    注意:Studio 3T 在使用 IntelliShell 功能时,需要先点进去一个集和在使用这个功能

    添加一个字段还不影响原来集合中的字段要使用Update语句,往journal_dataset_zh表中添加一个collects字段为int类型,默认为0。

    db.journal_dataset_zh.update({}, {$set: {collects: NumberInt(0)}}, {multi: 1})
    

    往journal_dataset_zh表中添加一个collects字段为long类型,默认为0。

    db.journal_dataset_zh.update({}, {$set: {collects: NumberLong(0)}}, {multi: 1})
    

    往journal_dataset_zh表中添加一个collects字段为小数类型,默认为0.0。

    db.journal_dataset_zh.update({}, {$set: {collects: 0}}, {multi: 1})
    

    往journal_dataset_zh表中添加一个collects字段为字符串类型,默认为"0"。

    db.journal_dataset_zh.update({}, {$set: {"collects": "0"}}, {multi: 1})
    

    往journal_dataset_zh表中添加一个updateDate字段为日期类型,为当前时间。

    db.journal_dataset_zh.update({}, {$currentDate: {updateDate: true}},{multi: 1})
    

    注意:{multi: 1} 这个属性为表中所有记录全部更新

    删除metadata_15732集合中 'status'字段等于0的所有数据

    db.metadata_15732.remove({'status':0})
    

    mongodb如何实现更新一个字段的值为另外一个字段的值?

    其中totalSize是有数据的字段,size是想新增的字段并且值为totalSize的值:

    db.journal_file.find().forEach(function(item){                 
       db.journal_file.update({"_id":item._id},
              {"$set": {"size":item.totalSize}},false,true) 
    })
    

    例如要把journal_file表中totalSize字段删除

    db.journal_file.update({},{$unset:{'totalSize':''}},false, true)
    
    mongodb多表关联查询
        {$lookup:{from:"orders",localField:"_id",foreignField:"uid",as:"orders"}},
        {$unwind:"$orders"},
        {$match:{name:"小明","orders.produce":"产品2"}},
        {$project:{name:"$name",age:"$age",produce:"$orders.produce",money:"$orders.money"}}])
    
    db.project_dataset_zh.aggregate([
        {$lookup:{from:"sdb_project",localField:"projectId",foreignField:"projectId",as:"orders"}},
        {$unwind:"$orders"},
        {$project:{code:"$orders.code",dataSetId:"$dataSetId",dataSetCode:"$dataSetCode",title:"$title"}}
    ])
    
    

    mongodb的多表查询比较简单,使用$lookup关键字即可:

    参数解释:
    form:需要关联的外表名;
    lookup的多变查询使用的是左外连接;
    localField:本表的外表关联字段;
    foreignField:外表的关联字段;
    as:参考查询结果,使用$lookup进行查询后会将所有符合条件的文档封装为一个list,as参数定义这个list的名字;

    $unwind的作用是将文档中的数组拆分为多条,拆分结果为:

    数据过滤:
    现在可以对数据进行过滤,数据过滤的步骤应该尽可能提前,但如果过滤条件中也需要筛选外表条件的话就没办法放前面了,过滤在聚合中使用$match

    如果对字段结果有要求可以使用project进行字段筛选:再聚合中$可以用作引用相应字段的值

    使用spring-data-mongodb在dao层的代码
    @Repository("aggregateDao")
    public class AggregateDaoImpl implements IAggregateDao {
        @Autowired
        private MongoTemplate mongoTemplate;
    
        public AggregationResults<Document> aggregateLookup() {
            // 创建条件
            AggregationOperation lookup = Aggregation.lookup("orders", "_id", "uid", "orders");
            AggregationOperation unwind = Aggregation.unwind("orders");
            AggregationOperation match = Aggregation.match(Criteria.where("name").is("小明").and("orders.produce").is("产品2"));
            AggregationOperation project = Aggregation.project("name", "age", "orders.produce", "orders.money");
            
            // 将条件封装到Aggregate管道
            Aggregation aggregation = Aggregation.newAggregation(lookup, unwind, match, project);
            
            // 查询
            AggregationResults<Document> aggregate = mongoTemplate.aggregate(aggregation, "user", Document.class);
            
            return aggregate;
        }
    }
    

    注意:

    1. lookup是如果涉及关联"_id",注意两个字段的类型,用string类型匹配ObjectId类型是没有结果的
    2. _class字段也是有些作用的,比如说使用$sum时用作分组
    3. 数据处理后续:Document返回的值,如果用作前端返回,ObjectId是会被当成BSON解析的

    MongoDB 按照portEntry字段分组查询(Group)并统计每个分组个数

    db.getCollection("certification_batch_info").aggregate({$group:{_id:"$portEntry",count:{$sum:1}}})
    

    修改流转信息表中sourceTpye 不等于口岸,status is null的数据,改成status =0,pending=1

    db.import_export_statistical.updateMany(
        {
            sourceTpye: {$ne : "口岸"},
            status: null
        },
        {
            $set: {"status": NumberInt(0), "pending": NumberInt(1)}
        }
    )
    

    相关文章

      网友评论

          本文标题:mongodb 的 IntelliShell 的简单操作

          本文链接:https://www.haomeiwen.com/subject/nbdnvqtx.html