mongodb 相关简单函数和方法(插入、删除)等 (1)

$ mongo //连接进数据库后



> show dbs; //显示所有database



> show foobar; //选择某个数据库



> show collections; //显示所有collections;



> var user = {"name": "may", "age": 23, "school": "TJUT"}; //创建一个user对象,设定相关属性



> db.users.insert(user); //如果不存在则创建一个users collection,并且插入了这个user



> db.users.insert({"name": "may", "age": 23, "school": "TJUT"}); //也可这么插入



> db.user.save(user);



> db.users.save({"name": "may", "age": 23, "school": "TJUT"});



> db.users.find(); //查找users collection 中的任意数据



> db.users.findOne(); //查找一个数据,

//上述find没有增加限定条件



> db.users.find({"name": "may"}); //在users collection中搜索name为may的所有的文档



> db.users.findOne({"name": "may"}); //在users collection 中搜索一个name为may的文档



//某个实例

> db.users.find();



{ "_id" : ObjectId("4fcf60accb7539fbf4ecb9b1"), "name" : "may", "age" : 1, "school" : "TJUT" }
{ "_id" : ObjectId("4fcf60d1cb7539fbf4ecb9b2"), "name" : "kai", "age" : 24, "school" : "ysu" }
{ "_id" : ObjectId("4fcf60e4cb7539fbf4ecb9b3"), "name" : "may" }

> db.users.find({"name": "may"});

{ "_id" : ObjectId("4fcf60accb7539fbf4ecb9b1"), "name" : "may", "age" : 1, "school" : "TJUT" }
{ "_id" : ObjectId("4fcf60e4cb7539fbf4ecb9b3"), "name" : "may" }

> db.users.findOne({"name": "may"});

{
"_id" : ObjectId("4fcf60accb7539fbf4ecb9b1"),
"name" : "may",
"age" : 1,
"school" : "TJUT"
}

> db.users.remove({"age": 1}); //删除users中age为1的文档

> db.users.remove(); //清空这个users collection

> db.users.clean(); //清空这个users collection


//修改



首先,获取某个记录

> var may = db.users.findOne({"name": "may", "age": 1});

> may;



{ "_id" : ObjectId("4fcf6483cb7539fbf4ecb9b5"), "name" : "may", "age" : 1 }

> db.users.find();

{ "_id" : ObjectId("4fcf6483cb7539fbf4ecb9b5"), "name" : "may", "age" : 1 }
{ "_id" : ObjectId("4fcf65e5cb7539fbf4ecb9b6"), "name" : "may" }
{ "_id" : ObjectId("4fcf6634cb7539fbf4ecb9b7"), "name" : "may", "age" : "二十" }


> delete may._id;

> may.age = 20;

> db.users.update({"name": "may"}, may);

> db.users.find();



{ "_id" : ObjectId("4fcf6483cb7539fbf4ecb9b5"), "name" : "may", "age" : 20 }
{ "_id" : ObjectId("4fcf65e5cb7539fbf4ecb9b6"), "name" : "may" }
{ "_id" : ObjectId("4fcf6634cb7539fbf4ecb9b7"), "name" : "may", "age" : "二十" }

这样我们会把一个name为may的文档修改age为20




> db.users.update({"name": "may"}, {"name": "kai"}); //修改

阅读全文

mongodb 相关简单函数和方法(插入、删除)等 (2)

如果每次我们都讲某个对象获取出来,再进行修改再进行update操作,这样效率很低,而且需要步骤太多了。mongodb提供了一种高效的修改方法:

//set

> db.users.insert({"name": "may", "age": 22}); //插入一个用户

> db.users.find();



{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "name" : "may", "age" : 20 }

//显示某个用户

如果我们给这个文档重新设定一个新的属性呢。可使用$set

> db.users.update({"_id": ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$set": {"sex": "male"}});

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "age" : 20, "name" : "may", "sex" : "male" }

我们发现给它新增加了一个sex属性。

同样,我们可以使用$set再进行修改

> db.users.update({"_id": ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$set": {"sex": "female"}});

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "age" : 20, "name" : "may", "sex" : "female" }

//$set 通常对某个文档增加一个新的属性或者修改这个文档中已有的属性

同样,可以增加就可以删除。这个属性为unset

> db.users.update({"_id": ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$unset": {"sex": 1}});

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "age" : 20, "name" : "may" }

我们尝试多_id进行删除

> db.users.update({"_id": ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$unset": {"_id": 1}});

Mod on _id not allowed

页面提示如上,说明这个_id是不可被删除的。重新find一下。查看结果。

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "age" : 20, "name" : "may" }

没有被删除

如果某个属性的值类型为数字,我们还可进行数值增加、删除等操作。这个使用使用$inc

> db.users.update({ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$inc": {"age": 10}});

给_id为 ObjectId("4fd0ab65bd1049ad60f809bc")的文档的age属性增加10

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "age" : 30, "name" : "may" }

我们尝试对某个不存在的属性进行数值增加

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$inc": {"no": 1000}});

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "age" : 30, "name" : "may", "no" : 1000 }

系统会增加这个不存在的属性,并进行数值设定

我们删除这个对象的多余的属性

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$unset": {"no": 1, "age": 1}});

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "name" : "may" }

push用于对某个数组属性增加新的值

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$push": {"comments": {"author": "may"}}});

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "comments" : [ { "author" : "may" } ], "name" : "may" }

//我们发comments为一个数组,数组内包含元素

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$push": {"comments": {"title": "just a joke!"}}});

需要注意的是。push不能对系统中已有的不为array的数组进行数据增加:

> db.users.update({"_id": ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$push": {"name": {"name": "may", "age": 20}}})

按照字面意思,理解为对某个文档的name进行push两个对象进去,但是由于该属性name不为数组,所以系统提示出错

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$unset": {"comments": 1}});

对于push,我们可以在push的时候进行已有数值判定,如果push进入的数组内已有某个数值,那么我们就不再进行push,通常做法是获取出所有数值,在进行比对,但是mongodb提供了一个push时候的方法。可自行进行判断。

$addToSet //添加到设置

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$push": {"friend": {"name": "kai"}}});

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$addToSet": {"friend": {"name": "kai"}}}); //如果我们用push,会有两个friend,但是这个不符合实际要求,使用addToSet,查看结果

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "friend" : [ { "name" : "kai" } ], "name" : "may" }

我们尝试使用push再进行测试

> db.users.update({"_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$push": {"friend": {"name": "kai"}}});

> db.users.find();

{ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc"), "friend" : [ { "name" : "kai" }, { "name" : "kai" } ], "name" : "may" }

他有了两个相同的friend。addToSet就是有push的时候增减是否重复值判断的作用。

现在的做法是,我们插入friend的是对象,有些时候,我们只需要插入某个人的名称(string)即可。使用如下方法:

> db.users.update({ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$push": {"friend": "haiyan"}});

批量插入,我们可以使用each //each是通常使用在数组上的一个方法。这个地方用法类型

> db.users.update({ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$addToSet": {"friend": {"$each": ["wang1", "wang2", "wang3"]}}});

需要注意的是,如果使用push,不会进行each,相反,会插入一个key为$each,value为数组的对象进去

同样,我们还可以删除数组中的某个键值

使用和push相反的push

> db.users.update({ "_id" : ObjectId("4fd0ab65bd1049ad60f809bc")}, {"$pop": {"friend": "wang1"}});

删除某个文档中friend的某个key为wang1的值,或者没key,只有value的wang1的值;

常用插入、修改、删除方法已如上

阅读全文

mongodb 简介和相关服务

mongodb 是一个主流的NoSQL数据库服务器,默认占用27017端口,还可进行REST,开启一个REST服务,REST服务占用端口为默认端口加1000 (28017端口)

linux下安装

$ sudo apt-get install mongodb

服务启动

$ sudo service mongodb start

$ sudo service mongodb stop

开启REST服务

$ sudo service mognodb stop //先停止服务

$ sudo /usr/bin/mongod –rest //启动REST服务

mongodb 配置文件在/etc/mongodb.conf 下进行配置




mongodb 提供了一个命令,这个命令可打开mongodb 的shell

$ mongo

MongoDB shell version: 2.0.4

connecting to: test

>

页面显示效果如上:



show dbs; //显示所以的database;

use test; //切换到test 数据库,如果不存在,则创建该数据库,并且将db变量设定为当前数据库

db; //显示当前db变量值



mongodb中,可以按照javascript的基本语法进行执行。并且包含了javascript的基本库类。Math.sqrt()等方法都可使用

mongodb中,如果需要显示某个变量的制,或者某个方法的真是内容,直接输入这个变量名称回车即可查看到

例如,use test;后,var db = test; // test为一个数据库对象

db.users.find //返回find方法的caller,我忘记怎么说了,就是返回这个方法对应的函数源码



一个database里一般有多个tables

mysql等关系型数据库中,show tables;可查看所有的table

在mongodb中,table有另外一种表示方法,我们称之为collection,

show collections; 可查看出所有的表。



我们对某个table进行数据填写时候,需要先创建这个table的基本的格式。create table user( xxxx等等限定条件。

然后执行SQL语句insert into table_name (col1, col2, col3, ….) value (value1, value2, value3,….);



mongodb中无需创建特定格式的collection即可进行数据增加

> db.users.insert({"name": "may"});

上述命令就会在当前db创建一个users的collection,然后给这个collection增加一个对象{"name": "may"};








阅读全文

Shell基本函数(1)

#echo 基本的输出函数,和php中的echo相同。
#shell中变量赋值为name=123等类似方法。但是调用的时候都需要使用$name。
#重新赋值时候用name即可
~$: name=hello

阅读全文

文件压缩之Tar

简单说明

tar 主要是将多个文件打包成一个文件。打包完成后再使用 bzip2gzip 等其他软件进行压缩

阅读全文

文件压缩之bzip2

安装bzip2

1
sudo apt-get install bzip2

阅读全文

gzip

安装

1
2
sudo apt-get install gzip
# 默认系统已经安装, 如果未安装可使用上述命令安装

阅读全文

文件压缩之Compress

安装

1
apt-get install ncompress

阅读全文

MySql克隆表

create table new_table_name like original_table_name;

for example :

create table user2 like user;

create table temp_labs like labs;



克隆只是对于表机构的克隆,不是克隆表数据。

而且克隆表的结构的时候primary_key等不会克隆过来。



同时克隆数据,使用进行数据克隆,使用如下命令:

insert into new_table_name select from original_table_name;

当然,在数据克隆的时候可以设定只克隆部分数据:

insert into new_table_name select from original_table_name where id > 20;



克隆的同时数据复制:



create table new_table_name select from original_table_name;



如果在create一个新的table的时候还需要增加新的属性,可以使用:



create table new_table_name (

id int(4) not null auto_increment,

primary key (id)

)

select from original_table_name;




阅读全文

php传值传址

每个变量都有一个地址

正常情况下,变量赋值

$a = 1;

我们可以理解为,将1这个数值存储到了$a的地址中去

$a = 2;

我们可以理解为,讲$a的地址内的数据给删除了,然后存储进了2

$b = $a;

我们可以理解为,创建一个新的地址给$b, 然后把$a内的数值放到$b;这个时候$b的数值是2

$b = 3;

将$b的地址内的值修改为3,但是$a不会修改,他们之间没有关系



$c = &$a ,讲$c 和$a 的数值存储地址关联,

修改$c的同时也修改$a;

$c = 6;

echo $a, 这个时候$a也就是6了;但是$b还是3;



函数传值function test($a) {

$a ++;

}

在外面,$a依然是原来的值



函数传址 function test(&$a) {

$a ++;

}

在外面,$a 加1 了;



函数返回值

假设$a = 1;



$b = function($a) {return $a+1};//$b = 2;

$b = 5;

$a没变化



$b = gaga($a);

function &gaga(&$a) {

$a++;

return $a;

}

//这时候$b = 12 $a 是2






$a = 1;

$b = &gaga($a);

function &gaga($a) {

return $a+1;

}

$b = 2;

$a 依然是1;





$a = 1;

$b = &gaga($a);

function &gaga(&$a) {

$a ++;

return $a;

}



$b = $a = 1;

$b = 3;

echo $a;

//$a = 3;

阅读全文