美文网首页
mongodb命令

mongodb命令

作者: ljt001 | 来源:发表于2022-08-12 05:44 被阅读0次

常用命令

注意:空值是null(小写),NULL和Null都不行;Mongo的可空类型是Null;

$all #匹配所有
$elemMatch #数组元素匹配
$exists #字段是否存在: {"name" :{$exists:true}}
$gt #>
$gte #>=
$lt #<
$lte #<=
$in #in 交集: { "idlist":{$in:[1,2]} }或{"idlist" : [1,2]}
$nin #not in
$ne #!=,not null:{name: {$ne:null} }
$not #!
$or #||, { $or:[{key1: value1}, {key2:value2}] }
$regex #正则式,查结尾为1:{"name":{$regex:"1$"}}
like #like,{"name":/a/}, 查结尾{"name":/1$/}。/[Git]/失败,/Git]/是可以的
not like #{Name:{$not:/a/}}
null # 字段不存在或字段值为空 {name: null}
$size # 数组元素个数 {idlist:{$size:3}}

$set
db.Table1.update({_id:1},{$set:{Name:"tom"}});

# 查时间, UTC时间格式是 yyyy-MM-ddThh:mm:ss.fffZ,秒和毫秒之间是点"."而不是冒号
{ "CreateTime":{$gt:ISODate("2015-09-01T13:08:16.603Z")} }
{ "CreateTime":{$gt:ISODate("2016-05-09")} }
{ "CreateTime": { $gt:ISODate("2017-04-11"),$lt:ISODate("2017-04-12") } }

# 嵌套查询用句点符号
{ "Content._v._id":37 }
# 示例数据:
{"Content": {
    "_v": {
      "_id": 37,
    }
}}

# 嵌套对象数组元素匹配
{"Func.Items":{$elemMatch:{value:1} } } 
# 示例数据:
{"Func":{
    "Items":[ {value:1},{value:2} ]
}}

#模糊搜索
{name:/tom/}

# 正则式
{name: /^T.*/}
{name: {$not: /^T.*/}}

# Javascript查询和$where查询
db.c1.find( { a : { $gt: 3 } } );
db.c1.find( { $where: "this.a > 3" } );
db.c1.find("this.a > 3");
f = function() { return this.a > 3; } db.c1.find(f);

# skip跳过指定文档数, limit返回指定文档数, sort:1正序asc|-1倒序desc
db.users.find().skip(10).limit(5).sort({name: 1}); #跳过前10条,返回5条,按name正排序
db.users.find().skip(10).limit(5).count(true);

# count(),count(true)或count(非0)
db.users.find().count();  #返回指定条件记录数
db.users.find().skip(10).limit(5).count(); #返回指定条件记录数,此处为uesr表所有记录数,而不是5。
db.users.find().skip(10).limit(5).count(true); #count(true)或count(非0)可返回限制记录数5

# 使用mongodb内部时间
db.test.updateOne({_id:1},{$currentDate: {lastModified:true}});

聚合命令

// 注意:$group第一列好像必须得是_id,换其他名称出错

// count(1),sum(xx)
db.log.aggregate([
{
  $match:{name:"test"}
},
{
  $group:{_id:"$name",count:{$sum:1},docs:{$sum:"$DocCount"}}
}]); 
// 结果
{
  "_id" : "test", 
  "count" : NumberInt(186), 
  "docs" : NumberLong(92500)
}

//$group下面的$match过滤结果集,相当于having 
db.log.aggregate([
{
  $match:{Switch:2}
},
{
  $group:{_id:"$name",count:{$sum:1},docs:{$sum:"$DocCount"}}
},
{
  $match:{count:{$gte:10}}
}]); 

db.user.aggregate([
{
    "$group":{"_id":{sex:1}, qty:{$sum:1},}
},
{
    "$match":{"qty":{$gt:1}}
}]);
//# 查询结果
{"_id": {sex:1}, "qty": 2}
{"_id": {sex:2}, "qty": 3}

db.user.aggregate([
{"$match":{"sex":1}},
{"$group":{
    "_id":{sex: "$sex", age:"$age"},
    qty:{$sum:1}
  }
},
{"$match":{"qty":{$gt:1}}}
]); 
//可以优化为
db.user.aggregate([
{"$match":{"sex":1}},
{"$group":{
    "_id":"$age", 
    qty:{$sum:1}
  }
},
{"$match":{"qty":{$gt:1}}}
]); 

//# 检查名称是否重复
db.user.aggregate([
{"$match":{"Status":1}},
{"$group":{
    "_id":{shopid:"$shopid",name:"$name"}, 
    qty:{$sum:1}
  }
},
{"$match":{"qty":{$gt:1}}}
]);

增删改返回值WriteResult

# 增删改返回值WriteResult
nInserted新增行数;#WriteResult({ "nInserted" : 1 }) 
nRemoved删除行数; #{"nRemoved": 1}
nMatched修改时查到的行数;#{"nMatched": 1, "nUpserted": 0, "nModified": 1}
nModified修改的行数,如果查到但没改变此值不增加,比如原值为tomxx,改为tomxx值不变所以此值不加;
nUpserted开启Upserted时执行update语句,找不到查找的值时新增的行数;
# WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

db.user.insert({_id:1,name:"tom"});
# WriteResult({ "nInserted" : 1 })

db.user.update({_id:1},{$set:{name:"tomxx"}},true);
# 第1次有变:WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.user.update({_id:1},{$set:{name:"tomxx"}},true);
# 第2次不变:WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })

db.user.update({_id:10},{$set:{name:"tom"}}); #不存在10
# WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 }) 

db.user.update({_id:10},{$set:{name:"tom"}},true);#Upserted参数为true时,不存在则新增
# WriteResult({"nMatched" : 0,"nUpserted" : 1,"nModified" : 0,"_id" : 10})

批量生成试验数据

//批量生成试验数据
cur_date = new Date();
for (i = 50001; i <= 5000000; i++){
db.test.insert({_id:i,name:'ztest na5454454545455445455454me end',desc:'zsdf32453dvgadfggjgktiliuo[p;uioadsf42wert34t5u0314utzxmzxMVlxvcnxcv',birthday:cur_date,crt_dt:cur_date});
cur_date = new Date(cur_date -3000);
}
cur_date = new Date(); 

//用insertMany
cur_date = new Date();
for(j =0; j<100; j++){
  k=j*10000;
list = [];
for (i = k+1; i <= k+10000; i++){
  list[i-1] = {_id:NumberLong(i),name:'ztest na5454454545455445455454me end_'+i+'_x',desc:'zsdf32453dvgadfggjgktiliuo;uioadsf42wert34t5u0314utzxmzxMVlxvcnxcv',birthday:cur_date};
cur_date = new Date(cur_date + 1);
}
db.Tow.insertMany(list);
}
cur_date = new Date(); 

相关文章

网友评论

      本文标题:mongodb命令

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