mongoDB整理

创建集合

db.createCollection('col')

集合的删除

db.collection.drop()

增删查

数据库插入一条数据

db.col.insert({title: 'MongoDB', 
    description: 'MongoDB 是一个 Nosql 数据库',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

数据库插入多条数据

db.products.insertMany( [
      { item: "card", qty: 15 },
      { item: "envelope", qty: 20 },
      { item: "stamps" , qty: 30 }
   ] );

数据库删除数据

db.col.remove({title:'MongoDB'})
如果是删除全部数据
db.col.remove({})

数据库查询

// 报错提示,会提示"Projection cannot have a mix of inclusion and exclusion",投影不能混合包含和排除。
db.device.find({}).projection({password:0,username:1})
// 写法需要分开
// 不显示password字段
db.device.find({}).projection({password:0})
// 仅显示username字段
db.device.find({}).projection({username:1})

sort()

sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

db.device.find({}).sort({_id:-1})

limit&skip

db.province_city.find({})
// limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
   .limit(50)
   // skip方法接受一个数字参数作为跳过的记录条数。
   .skip(49)

字段

删除表中的某个字段

使用update命令

update命令

update命令格式:

db.collection.update(criteria,objNew,upsert,multi)

参数说明:

criteria:查询条件
objNew:update对象和一些更新操作符
upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。
multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。

db.permission.update({}, {    $unset: {"id":''}},false, true)

增加一个字段

db.permission.update({},{$set:{'last_time':new Date()}},{"multi" : true,"upsert" : false})

修改字段名

将last_name修改为first_name

db.permission.update({},{
$rename:{'last_time':’first_time‘}    },    { 
"multi" : true, 
 "upsert" : false
 })

查询角色表中,权限数组中包含某个值

db.role.find({permissions:{$elemMatch:{$eq:"60823608f3bbba2308d1baa9"}}})   

索引

创建单个索引

db.getCollection("role").createIndex({ "name": 1 })

创建联合索引

db.getCollection("role").createIndex({ "_id": 1, "name": 1 })

删除单个索引

db.getSiblingDB("workbench")  .getCollection("role").dropIndex("desc_1")

删除联合索引

db.getSiblingDB("workbench")  .getCollection("role").dropIndex("name_1_desc_1")

MongoDB / Driver

php向数据库插入数据原始代码

// mongodb/driver/bulikWrite::insert
$bulk = new MongoDB\Driver\BulkWrite();
$document = ['_id' => 'custom ID', 'title' => 'two'];
$ _id = $bulk->insert($document);
$mongo = new MongoDB\Driver\Manager( 'mongodb://localhost:27017' );
$writeConcern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\ WriteConcern::MAJORITY,1000 );
$result = $manager->executeBulkWrite('db.collection',$bulk, $writeConcern);$this->last_error = $result->getWriteErrors();

php向数据库删除数据

$bulk = new MongoDB\Driver\BulkWrite();
$bulk->delete(['x' => 1]);
$write_concern = new MongoDB\Driver\WriteConcern(MongoDB\Driver\ WriteConcern::MAJORITY, 10000);
$result = $this->mongo->executeBulkWrite("{$this->db_name}.{$table}", $bulk, $write_concern);
$this->last_error = $result->getWriteErrors();

php向数据库进行查询

$query = new MongoDB\Driver\Query($where, $options);
$rows = $this->mongo->executeQuery("{$this->db_name}.{$table}", $query)->toArray();
foreach($rows as $row) {
$row = get_object_vars($row); 
$row['id'] = (string)$row['_id'];
unset($row['_id']);
$result = $row;
}
return $result;

查询时间范围内的数据

//mongoDB
db.on_off_shelves.find({'add_time':{'$gt':"2021-08-23 16:52:00","$lt":"2021-08-23 16:54:00"}})    //php
$where['add_time'] = ['$gte' => $value['start'], '$lte' => $value['end']];

内嵌文档匹配查询

// mongodb
db.picking_list.find({ "stock_product":{"$elemMatch":{"picking_status":{"$eq":1}}}})
 // php
$where['stock_product'] = ['$not' => ['$elemMatch' => ['picking_status' => 0]]];

返回子集和

// 返回stock_product数组中前两个子集对象
db.picking_list.find({},{ "stock_product":{"$slice":2}})
// 返回stock_product数组中最后两个子集对象
db.picking_list.find({},{ "stock_product":{"$slice":-2}})
// 返回stock_product数组中指定索引的子集对象
 db.picking_list.find({},{ "stock_product":{"$slice":[1,2]}})

$in && $all

// 如果我们需要查询包含”apple”或者”banana”的文档,则使用”$in”
db.food.find({"fruit":{"$in":["apple","banana"]}})
// 我们想要查询既包含”apple”并且又包含”banana”的文档,就需要使用”$all“来查询
db.food.find({"fruit":{"$all":["apple","banana"]}})

聚合查询

// mongoDB
db.device_log.aggregate([
//$match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
{ $match : { device_id : {$in:["TEST-10002","TEST-10003" ]} }},
// $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
{ $project : {date : {$substr : ["$send_time",0,10]}}},
// $group:将集合中的文档分组,可用于统计结果。
{ $group:{_id:"$date",count:{$sum:1}}}
])    
// php
$on_shelves_aggregate = ['aggregate' => 'on_off_shelves','pipeline' => [['$match' => ['status' => 1, 'add_time' => ['$gte' => $start_date, '$lt' => date('Y-m-d', time())], 'company_id' => $_SESSION['company_id']]],['$project' => ['add_time_date' => ['$substr' => ['$add_time', 0, 10]]]],     
['$group' => ['_id' => '$add_time_date', 'count' => ['$sum' => 1]]],
// $sort:将输入文档排序后输出。 
['$sort' => ['_id' => 1]],],'cursor' => new stdClass(), 
];

聚合嵌套

// mongoDB
db.picking_list.aggregate([    
{$match:{"stock_product":{"$elemMatch":{"stock_id":"612355838415000062000fbf","picking_status":0}}}},    
{$unwind:"$stock_product"},    
{$match:{"stock_product.stock_id":"612355838415000062000fbf"},  
])// php 
$picking_quantity_aggregate = [            
'aggregate' => 'picking_list',           
 'pipeline' => [                
 ['$match' => ['stock_product' => ['$elemMatch' => ['stock_id' => $stock_id, 'picking_status' => 0]]]],               
  ['$unwind' => '$stock_product'],               
   ['$match' => ['stock_product.stock_id' => $stock_id]],                
   ['$group' => ['_id' => '$stock_product.stock_id', 'sum' => ['$sum' => '$stock_product.picking_quantity']]],            
   ],            
   'cursor' => new stdClass(),        
   ];

运算

四则远算的:加法("$add")、减法("$subtract")、乘法("$multipy")、除法("$divide")、
求模("$mod")关系运算:大小比较("$cmp")、等于("$eq")、大于("$gt")、大于等于("$gte")、小于("$le")、小于等于("$lte")、不等于("$ne")、判断 null"$ifNull"),
这些返回值都是 "boolean" 值类型的。
逻辑运算:与("$and")、或("$or")、非 ("$not")字符串操作:连接("$concat")、截取("$substr")、转小写("$toLower"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值