mongodb增删改查

3 篇文章 0 订阅
1 篇文章 0 订阅

mongodb增删改查

MongoDB是面向文档存储的非关系型数据库,文档结构形式叫BSON(类似JSON)


No.1 语法:
====================

插入
db.tableName.insert({name:"user1"});
db.tableName.save({_id:1, name:"user1"}); //save()如果已经存在就不会插入,如果不存在就插入
//save就是id相同就更新,没有相同id就插入

删除
db.tableName.remove();
db.tableName.remove({name:"user1"});

db.tableName.find({name:"user1"},{name:1, age:1, _id:0});

条件表达式:
< <= > >= !=
$gt: 大于
$lt: 小于
$gte: 大于等于
$lte: 小于等于
$ne: 不等于

统计: 
db.tableName.count();
db.tableName.find().count();
//count(1); count()参数如果为1则会取符合条件的记录,如果为0会忽略条件语句


排序:
db.c1.find().sort(age:1); //1是升序 0是降序

取多少个
db.c1.find().limit(4);

跳过几个
db.c1.skip(1);
db.c1.skip(0).limit(10).sort({age:-1});

$all
操作类似于$in操作,但是不同的是,$all操作要求数组里面的值全部是包含在返回的记录里面
db.c2.find({post:{$all:[1,2,3]}});

$exists
操作检查一个字段是否存在
db.c2.find({age:{$exists:1}}); 测试一个字段是否存在

$mod
操作可以让我们简单的进行取模操作,而不需要用到where子句
//这里的是字段值的取余操作
db.c1.find({age:{$mod:[2]}});


$in 操作类似于传统关系数据库中的IN
db.c1.find({age:{$in:[1,2,3]}})

$nin 与$in相反
db.c1.find({age:{$nin:[2,3,4]}});


$or 查看指定多个条件的记录,跟sql的or差不多
db.c1.find({$or:[{name:"user1"},{name:"user2"},{age:10}]});

$nor 与$or相反过滤指定的条件
db.c1.find({$nor:[{name:"user1"},{name:"user2"},{age:10}]});

$size
操作将会查询数组长度等于输入参数的数组

$elemMatch 元素配置的意思


slaveOk
当我们在replica set进行检索操作时,默认的路由会选择master机器,当我们需要针对任意的从机进行查询的时候,我们需要开启slaveOk选项。当我们在没有开启salveOk选项的时候,如果进行此操作会报如下错: *** not master and slaveok=false
所以我们要进行如下操作: rs.slaveOk(); // enable querying a secondary db.users.find(...)


11) Cursors游标及Cursor Methods
遍历游标
var x = db.c1.find();
x.next();
x.hasNext();
while(x.hasNext() == true){
x.next();
}


NULL查询(有一个值是为null,或者一个值不存在)
db.c4.find({age:null}); //列出所有为null或者不存在的值
db.c4.find({age:{$type:10}}); //列出所有为null的数据

第二种写法
db.c4.find({age:{$exists:1, $in:[null]}});
//两个条件,一个是exists必须存在,二是为null的数据

$slice

4. Update
1) 语法 db.collection.update( criteria, objNew, upsert, multi )
参数说明: Criteria:用于设置查询条件的对象 Objnew:用于设置更新内容的对象 Upsert:如果记录已经存在,更新它,否则新增一个记录 Multi:如果有多个符合条件的记录,全部更新 注意:默认情况下,只会更新第一个符合条件的记录

$set //修改字段 
db.c5.update({name:"user1"},{$set:{age:10}},0,1);

$inc //对字段进行加 a = a+1
db.c5.update({},{$inc:{age:-10}},0,1);

$unset //删除一个字段
db.c5.update({},{$unset:{age:1}});

$push
db.c5.update({},{$push:{arr:1}}); //压入一个值进入数组


$pushAll
db.c5.update({}, {$pushAll:{arr:[2,3,4]}}); //压入多个值进入数组

$pop
db.c5.update({}, {$pop:{arr:1}}); //弹出数组中的最后一个元素
db.c5.update({}, {$pop:{arr:1}}); //弹出数组中的第一个元素

$addToSet
语句: {$addToSet: {field: value}}
如果filed是一个已经存在的数组,并且value值不在其中,那么value加入到数组中
filed不存在,那么把value当成一个数组存储到filed中
filed是一个已经存在的非数组类型,那么将会报错

扩展肜户
{$addToSet:{a:{$each:[1,2,3,4,5,6]}}};

$pull
语法:{$pull:{field:_value}}
功能: 如果field是一个数组,那么删除符合_value检索条件的记录
如果field是一个已经存在的非数组,那么会报错

$pullAll
语法: {$pullAll:{field:value_array}}
功能: 同$pull类似,只是value的数据类型是一个数组

$rename
语法:{$rename:{old_field_name: new_field_name}}
功能:重命名指定的字段名称

特殊操作符:$
$操作符代码查询记录中第一个匹配条件的记录项
$db.c5.update({"arr.title":"linx"}, {$set:{arr.$.title:"I lover linx"}});

注意: 在数组中用$配合$unset操作符的时候,效果不是删除的元素,而是把匹配的元素变成null
$db.c5.update({"arr.title":"php"},{$unset:{arr.$:1}});


var x = db.c1.findOne({"user":"user1"});
x.age = 40;
x.nickname="xlc";
db.c1.save(x);

******************************************

 No.2 Java操作mongo的例子:
===============
外部调用findExam方法,从而获得exams列表

@Repository("testDao")
public class testDaoImpl implements testDao {

    private static String COLLECTION_NAME = "examTable";

    @Override
    public List<Exam> findExam(String schoolId, String classId) {
        List<Exam> exams= new ArrayList<Exam>();
        BasicDBObject  query = new BasicDBObject();
        if(schoolId != null){
            query.append("schoolId",schoolId);
        }
        if(classId !=null){
            query.append("classId",classId);
        }
        DBCollection dbCollection = MongodbManager.DB_TL.getCollection(COLLECTION_NAME);
        BasicDBObject dbObject = new BasicDBObject();
        dbObject.put("examTime",1);
        DBCursor dbCursor =dbCollection.find(query).sort(dbObject);
        while(dbCursor.hasNext()){
            exams.add(convertExam((BasicDBObject)dbCursor.next()));
        }
        return exams;
    }

    private Exam convertExam(BasicDBObject basicDbObject){
        Exam exam = new Exam();
        exam.setClassId(basicDbObject.getString("classId"));
        exam.setClassName(basicDbObject.getString("className"));
        exam.setXxx(basicDbObject.getDouble("xxx"));
        exam.setAvg(basicDbObject.getDouble("Avg"));
        exam.setSchoolId(basicDbObject.getString("schoolId"));
        exam.setSchoolName(basicDbObject.getString("schoolName"));
        return exam;
    }


}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值