一.根据数组字段的某个值查询指定字段
例如:我想根据friend字段(数组)下的子字段查出我想要的指定字段
查询语句:
说明:“initiatorPhone”:1,“initiatorUserId”:1代表只查询这两个字段,如果是0则代表过滤这俩字段。
和mysql的select ‘a,b,c’ form table指定字段效果一样
db.getCollection("zhuli201909300943").find({
"friends.friendNickName":"李可欣"},{
"initiatorPhone":1,"initiatorUserId":1});
结果:
二.查询时间范围
$gt, $lt, $gte, $lte 分别对应(>, <, >=, <=)
demo: 查询指定时间范围的数据
db.getCollection("zhulirecords").find({
"initiatorUserId":2003, "createTime" : { "$gte" : ISODate("2019-09-29T05:00:00Z")
, "$lt" : ISODate("2019-09-29T05:05:00Z") } });
三.批量更新或插入表数据
db.dreamconfigs.update({}, {$set: {
"type": "yuanmeng"}}, {multi: 1})
效果:
更新了15条
四.查询数组字段的长度值
db.zhuli201909280535.aggregate([{
"$match" : {
"initiatorUserId" : 2623}}, {
"$project" : {
"count":{
"$size":"$friends"} }} ])
五.创建数据库权限
如果需要外网访问首先在你的服务器出入向规则打开端口权限
另外要配置绑定IP改为0.0.0.0
不同权限对应的名称:
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、dbOwner、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色:backup、restore
所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
dbAdminAnyDatabase
超级用户角色:root
db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }]
}
)
六、删除表字段
db.zhulirecords.update({},{$unset:{
'zhulirecords':''}},false, true)
七、批量修改字段类型
* 一层字段类型更改:
db.cjcounts.find({
"laveCount":{$type:16}}).forEach(
function(x){
db.cjcounts.updateOne({_id: x._id}, {$set:{laveCount: String(x.laveCount)}})
}
);
* 多层字段类型更改:
db.zhongjiangs.find({}).forEach(
function (x) {
x.jiangList.forEach(function (doc) {
printjson(doc)
db.zhongjiangs.updateOne({
"jiangList._id": doc._id}, {$set: {
"jiangList.$.initiatorUserId": String(doc.initiatorUserId)}})
})
}
)
*字段类型编号:
八、按天分组查询这天出现的次数
类似这个表
db.subSendRecord.aggregate(
[
{
'$group': {
'_id': {
"$dateToString":{
'format':'%Y-%m-%d','date':'$createTime'}},'count': {
'$sum': 1}}}
]
)
查询结果:
如果想查这天里某个字段出现的次数:
db.subSendRecord.aggregate(
[
{ '$group': { '_id': {
'date':{
"$dateToString":{
'format':'%Y-%m-%d','date':'$createTime'}},'openid':"$openid"}, 'sum': { '$sum': 1 } } }
]
)