MongoDB


一、操作符

"$lt"       :"<"
"$lte"      :"<="
"$gt"       :">"
"$gte"      :">="
"$ne"       :"!="
"$in"       :查询匹配指定条件值的文档;
"$nin"      :查询不匹配指定条件值的文档;
"$or"       :或查询


如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:


操作

格式

范例

RDBMS中的类似语句

等于

​{<key>:<value>​​}

​db.col.find({"by":"菜鸟教程"}).pretty()​

​where by = '菜鸟教程'​

小于

​{<key>:{$lt:<value>}}​

​db.col.find({"likes":{$lt:50}}).pretty()​

​where likes < 50​

小于或等于

​{<key>:{$lte:<value>}}​

​db.col.find({"likes":{$lte:50}}).pretty()​

​where likes <= 50​

大于

​{<key>:{$gt:<value>}}​

​db.col.find({"likes":{$gt:50}}).pretty()​

​where likes > 50​

大于或等于

​{<key>:{$gte:<value>}}​

​db.col.find({"likes":{$gte:50}}).pretty()​

​where likes >= 50​

不等于

​{<key>:{$ne:<value>}}​

​db.col.find({"likes":{$ne:50}}).pretty()​

​where likes != 50

 
MongoDB 查询文档

二、链式操作

append方法:尤其适用于日期等区间查询条件。

三、一些基本操作

db.createCollection('user');  --创建表

db.getCollection('user').remove({'_id':1});  --删除记录

db.getCollection('user').ensureIndex({"email":1});  --新建索引

db.getCollection('user').insert({  --插入记录        

"_id" : 1,

"email" : "xxx@mtime.com",

"name" : "哈哈",

"salt" : "5927eb03f6ee9428bc55aa0d",

"pwd" : "121212",

"admin" : true,

"roles" : [

],

"subjects" : [

1,

2,

3,

4

],

"status" : 1,

"muser" : 1,

"mtime" : ISODate("2017-07-10T01:21:19.359Z")

}

);


--修改记录

db.getCollection('language').update({},{$set:{muser:5,mtime:new Date()}},false,true);

db.getCollection('language').update({},{$unset:{'modifyTime':''}},false, true); --删除列

db.getCollection('language_pack').update({},{$set:{modifyUser:5,modifyTime:new Date()}},false,true);

db.getCollection('activity').update({_id:25}, {$set: {status:2}}, {multi: true});


创建复合唯一索引


db.video.createIndex({source_type:1,source:1,video_id:1,key_word:1},{name:'idx_source_type_source_video_id_key_word',unique:true});



--分组聚合

管道的概念

管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。

MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。

表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。

这里我们介绍一下聚合框架中常用的几个操作:


  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。


db.getCollection('video').aggregate([
{ $group: { _id : '$source', count: { $sum : 1 } } },
{ $match: { count: { $gt : 1} } }
])




db.getCollection('video').aggregate([

  {$project:{source : 1, source_type : 1,video_id:1,enter_time:1}},

  {$match: {source:2,enter_time:{"$gte":ISODate('2020-03-22 07:42:58.675') , "$lt":ISODate('2020-05-22 19:00:00.141') },can_capture:{$ne:1}}},

  {$group: { _id: {source : '$source', source_type : '$source_type',video_id:'$video_id'}, count: { $sum: 1 } }},

  {$sort:{video_id:1}},

  {$skip: 0 },

  {$limit: 10 }

]);


注意:$peoject中,1-包含,0-不包含,_id 字段默认为包含


--查询与删除重复数据


db.video.aggregate([{
$group: {
_id: {
source: '$source',
source_type: '$source_type',
video_id: '$video_id',
key_word: '$key_word'
},
count: {
$sum: 1
},
dups: {
$addToSet: '$_id'
}
}
}, {
$match: {
count: {
$gt: 1
}
}
}]).forEach(function(doc) {
doc.dups.shift();
db.video.remove({
_id: {
$in: doc.dups
}
});
})



按日期分组统计


{
"collection": "video",
"aggregate": [
{
"$match": {
"enter_time": {
"$gte": {
"$humanTime": "{{ StartDate }}"
},
"$lt": {
"$humanTime": "{{ EndDate }}"
}
}
}
},
{
"$group": {
"_id": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$enter_time",
"timezone": "+0800"
}
},
"count": {
"$sum": 1
}
}
}
]
}





日期条件查询



db.video_comment_push_log.find({"source_type":4,"source":4}).sort({"_id":-1}).limit(2);

db.video_comment.find({"source_type":4,"source":4,"enter_time":{"$gte":ISODate('2020-04-22 07:42:58.675') , "$lt":ISODate('2020-04-22 19:00:00.141') }}).count();

db.video_comment.find({"source_type":4,"source":4}).sort({"enter_time":-1}).limit(100);

db.video_comment.count({"source_type":4,"source":4});



back


db.video_comment_push_log.find({"source_type":7,"source":2}).sort({"_id":-1}).limit(20);

db.video_comment.find({"source_type":4,"source":4,"enter_time":{"$gte":ISODate('2020-04-22 03:00:00.114') , "$lt":ISODate('2020-04-22 05:00:00.111') }}).count();

db.video_comment.find({"source_type":4,"source":4}).sort({"enter_time":-1}).limit(100);

db.video_comment.count({"source_type":4,"source":4});

db.video_push_log.find({"source_type":71,"source":2}).sort({"_id":-1}).limit(20);

db.video.count({"source_type":4,"source":4,"enter_time":{"$gte":ISODate('2020-04-22 17:00:00.136') , "$lt":ISODate('2020-04-23 06:00:00.098') }});

db.teleplay_episode.count({"source_type":7,"source":2,"enter_time":{"$gte":ISODate('2020-04-21 00:00:00.208') , "$lt":ISODate('2020-04-21 16:00:00.249') }});

db.teleplay_comment.count({"source_type":7,"source":2,"enter_time":{"$gte":ISODate('1970-01-01 00:00:00.001') , "$lt":ISODate('2020-04-22 06:00:00.156') }});



redash查询mongo


{
"collection":"series_top_list",
"query":{"code":"tengxunshipin"},
"$sort": [{"name": "ranking","direction": 1}]
}




{
"collection":"risk_score",
"aggregate":[
{"$group":{"_id":"$udid", "count":{"$sum":1}}},
{"$match":{"count":{"$gt":1}}},
{"$sort": [{"name": "count","direction": -1}]}
]
}





安装部署(windows)

MongoDB学习记录_ide


MongoDB学习记录_ide_02


MongoDB学习记录_MongoDB_03


注意:使用的时候 请先在服务管理中 启动  MongoDB Server


常用命令行操作

1、显示当前数据库服务上的数据库

show dbs;

2、切换到指定的数据库进行操作

use mydb

3、显示当前数据库的所有集合(collections)

show collections;

4、查看数据库服务的状态

db.serverStatus();

5、查询指定数据库的统计信息

use admin

db.stat()

6、查询指定数据库包含的集合名称列表

use test1

db.getCollectionNames()

7、统计集合记录数

db.test1.count()

8、统计指定条件的记录数

db.test1.find({"name":"yunweicai"}).count()

9、查询指定数据库的集合当前可用的存储空间

db.test1.storageSize()

10、查询指定数据库的集合分配的存储空间

db.test1.totalSize()