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() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
db.device.find({}).sort({_id:-1})
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]}})
// 如果我们需要查询包含”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")