mongodb增删改查

1)增
db.users.insert({});
db.users.insertMany([{},{}]);

2)删
删除记录
db.users.remove({}, 0); (默认)删除全部文档
db.users.remove({}, 1); 只删除一篇文档

3)改
参数说明:
第一个参数:匹配的条件
第二个参数:更新的内容
第三个参数:存在更新,不存在写入?
第四个参数:更新多个文档?

db.users.update({}, {}, 0, 0); (默认)只更新一篇文档(效果同updateOne)
db.users.update({}, {}, 0, 1); 更新全部匹配的文档(效果同updateMany)

魔术变量:
【普通字段的更新】
$set
修改指定字段(字段不存在则自动增加并赋值)
db.users.update({'name':'张三'},{$set:{'age':30}});

$inc
字段值(字段不存在则自动增加并赋值)
db.users.update({'name':'张三'},{$inc:{'score':10}});


【数组字段的更新】
$push(追加单个值)
db.users.update({'name':'张三'}, {$push:{'article':100});
db.users.update({'name':'张三'}, {$push:{'article':[1,2,3]}}); 追加数组

$pushAll(追加多个值)
db.users.update({'name':'张三'}, {$pushAll:{'article':[1,2,3]}});

$pop(移除数组最后一个(1)或第一个值(-1))
db.users.update({'name':'张三'}, {$pop:{'article':1}});
db.users.update({'name':'张三'}, {$pop:{'article':-1}});

$addToSet(追加一个不重复的值:已存在相同值则不追加)
db.users.update({'name':'张三'}, {$addToSet:{'article':101}});
db.users.update({'name':'张三'}, {$addToSet:{'article':{$each:[99,100,101,102,103,104,105]}}});

$pull(移除数组中一个值)
db.users.update({'name':'张三'}, {$pull:{'article':105}});

$pullAll(移除数组中多个值)
db.users.update({'name':'张三'}, {$pullAll:{'article':[98,99]}});

$rename(更改字段名)
db.users.update({'name':'张三'}, {$rename:{'profile':'others'}});

4)查
【比较运算】
等于
db.users.find({'age':{$eq:23}});
不等于
db.users.find({'age':{$ne:23}});
大于等于
db.users.find({'age':{$gte:23}});
大于
db.users.find({'age':{$gt:23}});
小于
db.users.find({'age':{$lt:25}});
小于等于
db.users.find({'age':{$lte:25}});

db.users.find({'name':'张三', 'age':30});
或者
db.users.find({$or:[{'age':23},{'age':25}]});

【范围】
$in
db.users.find({'age':{$in:[23,25]}});
$nin
db.users.find({'age':{$nin:[23,25]}});

【数组长度】
$size
db.users.find({'article':{$size:7}});

【值类型】
$type
db.users.find({'age':null}); 这个会查询出没有age字段的文档
db.users.find({'age':{$type:10}}); 严格查询出字段值为null的文档

【函数】
$where(this代表每一条文档,不用有个别文档才有的字段做条件,会报错)
db.users.find({$where:function(){return this.name=='李四'}})
db.users.find(function(){return this.name=='李四'});

$slice(在匹配的基础上对文档数组进行操作,数组截取)
db.users.findOne({'name':'张三'},{'article':{$slice:1},'collections':{$slice:1}});


count()
db.users.find().count(false);
注意:当需要limit方法和count方法一起使用时,count里参数需传true,否则忽略limit方法的影响
db.users.find().limit(20).count(true);

Null查询
db.users.find({'age':{$type:10}});

分页查询
db.users.find().skip(20).limit(20);

游标操作
var result = db.users.find({'age':{$gt:23}});
检查是否有下一个文档
result.hasNext();
输出下一个文档
result.next();
result.next();
result.next();
一次性输出剩下的文档
result;


筛选字段输入
db.users.find({'name':'张三'}, {'age':1, 'score':1});
默认输入里都带'_id'字段的,如果不想要'_id'字段,可以使用{'_id':0}
db.users.find({'name':'张三'}, {'age':1, 'score':1, '_id':0});

原文地址:https://www.cnblogs.com/tujia/p/5338321.html