paulwong

#

SVN的标准目录结构:trunk、branches、tags

我们在一些著名开源项目的版本库中,通常可以看到trunk, branches, tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式。

trunk是主分支,是日常开发进行的地方。

branches是分支。一些阶段性的release版本,这些版本是可以继续进行开发和维护的,则放在branches目录中。又比如为不同用户客制化的版本,也可以放在分支中进行开发。

tags目录一般是只读的,这里存储阶段性的发布版本,只是作为一个里程碑的版本进行存档。

比如一个项目有main.cpp, common.h两个文件,假设目前在开发的是最新的3.0版本,而且1.0/2.0版本也在进行维护,那么项目树将类似如下样子:

project
|
+-- trunk
+ |
+ +----- main.cpp (3.0版本的最新文件)
+ +----- common.h
+
+-- branches
+ |
+ +-- r1.0
+ + |
+ + +---- main.cpp (1.x版本的最新文件)
+ + +---- common.h
+ +
+ +-- r2.0
+ |
+ +---- main.cpp (2.x版本的最新文件)
+ +---- common.h
+
+-- tags (此目录只读)
|
+-- r1.0
+ |
+ +---- main.cpp (1.0版本的发布文件)
+ +---- common.h
+
+-- r1.1
+ |
+ +---- main.cpp (1.1版本的发布文件)
+ +---- common.h
+
+-- r1.2
+ |
+ +---- main.cpp (1.2版本的发布文件)
+ +---- common.h
+
+-- r1.3
+ |
+ +---- main.cpp (1.3版本的发布文件)
+ +---- common.h
+
+-- r2.0
+ |
+ +---- main.cpp (2.0版本的发布文件)
+ +---- common.h
+
+-- r2.1
|
+---- main.cpp (2.1版本的发布文件)
+---- common.h


要使用这样的文件夹结构,在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录,再将项目文件夹连同这三个子目录一起导入版本库。

这样在trunk中开始进行开发,当需要建立branch或tag时,使用SVN的copy操作进行。

其中tags目录需要只读,可以使用SVN中的authz文件控制该目录的访问权限为只读。

posted @ 2014-05-07 00:07 paulwong 阅读(283) | 评论 (0)编辑 收藏

Packt celebrates International Day Against DRM, May 6th 2014

Packt celebrates International Day Against DRM, May 6th 2014

 

 

 

 

 

According to the definition of DRM on Wikipedia, Digital Rights Management (DRM) is a class of technologies that are used by hardware manufacturers, publishers, copyright holders, and individuals with the intent to control the use of digital content and devices after sale.

 

However, Packt Publishing firmly believes that you should be able to read and interact with your content when you want, where you want, and how you want – to that end they have been advocates of DRM-free content since their very first eBook was published back in 2004.

 

To show their continuing support for Day Against DRM, Packt Publishing is offering all its DRM-free content at $10 for 24 hours only on May 6th – that’s all 2000+ eBooks and Videos. Check it out at: http://bit.ly/1q6bpha.

posted @ 2014-05-06 20:05 paulwong 阅读(193) | 评论 (0)编辑 收藏

LINUX下安装SVN客户端及MAVEN

  1. 安装SVN客户端
    apt-get install subversion subversion-tools

  2. 下载代码
    svn co http://svn.shiwan.com/svn/shiwan/branches/program/


  3. 更新代码
    cd 到欲更新代码的目录
    svn update


  4. 安装MAVEN,下载安装包并解压
    wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.tar.gz
    tar -zxf apache-maven-3.0.3-bin.tar.gz


  5. 编辑/etc/profile
    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    export STORM_HOME=/home/ubuntu/java/storm-0.8.1
    export KAFKA_HOME=/home/ubuntu/java/kafka_2.9.2-0.8.1.1
    export ZOOKEEPER_HOME=/home/ubuntu/java/zookeeper-3.4.6
    export BIN_HOME=/home/ubuntu/java
    export MAVEN_HOME=/home/ubuntu/java/apache-maven-3.2.1

    export PATH=$JAVA_HOME/bin:$STORM_HOME/bin:$KAFKA_HOME/bin:$ZOOKEEPER_HOME/bin:$BIN_HOME/bin:$MAVEN_HOME/bin:$PATH


  6. 更新SOURCE
    source /etc/profile


  7. CD到含有pom.xml的文件夹,运行
    mvn package


  8. CD到target文件夹即可看到已编辑的文件
    cd 到欲更新代码的目录
    ll


posted @ 2014-05-05 17:06 paulwong 阅读(430) | 评论 (0)编辑 收藏

非ORACLE网站下载JDK

http://ghaffarian.net/downloads/Java/JDK/

posted @ 2014-05-04 18:48 paulwong 阅读(239) | 评论 (0)编辑 收藏

安装STORM

  1. install ZeroMQ
    wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz
    tar -xzf zeromq-2.1.7.tar.gz
    cd zeromq-2.1.7
    ./configure
     //在configure时可能会报缺包,安装即可:sudo apt-get install g++ uuid-dev
    make
    sudo make install
  2. install JZMQ
    git clone https://github.com/nathanmarz/jzmq.git
    cd jzmq
    ./autogen.sh
    ./configure
    make
    sudo make install

  3. 下载并解压STORM

  4. 编辑conf/storm.yaml
    storm.zookeeper.servers:
    "1.2.3.5"
    "1.2.3.6"
    "1.2.3.7"
    storm.local.dir: "/opt/folder"
    nimbus.host: "54.72.4.92"
    supervisor.slots.ports:
    6700
    6701
    6702
  5. 编辑/etc/profile
    export JAVA_HOME=/usr/lib/jvm/java-7-oracle
    export STORM_HOME=/home/ubuntu/java/storm-0.8.1
    export KAFKA_HOME=/home/ubuntu/java/kafka_2.9.2-0.8.1.1
    export ZOOKEEPER_HOME=/home/ubuntu/java/zookeeper-3.4.6

    export PATH=$JAVA_HOME/bin:$STORM_HOME/bin:$KAFKA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH

  6. 制作启动命令: start-storm.sh
    storm nimbus &
    storm supervisor &
    storm ui &

安装途中如果遇到问题
http://my.oschina.net/mingdongcheng/blog/43009

posted @ 2014-05-04 18:01 paulwong 阅读(261) | 评论 (0)编辑 收藏

ubuntu 察看 java安装路径

有时候不知道java安装在哪里了 通过whereis java命令不能知道java真是的安装路径
可以通过 update-alternatives --config java 命令察看

bean@ubuntu :~$ update-alternatives --config java
There is only one alternative in 
link group java: /usr/lib/jvm/java-7-oracle/jre/bin/java
Nothing to configure
.
bean
@ubuntu :~

或者这种方法也可以:
进入到相应的目录:cd /usr/bin

查看java链接到了哪里:ls -l java

localhost:bin root# ls -l java
lrwxr-xr-x 1 root wheel 74 May 18 10:26 java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

posted @ 2014-05-04 11:43 paulwong 阅读(8173) | 评论 (0)编辑 收藏

Ubuntu Tips: How To Enable Root User ( Super User ) in Ubuntu


Question: I’m unable to do su – on Ubuntu. It says “su: Authentication failure”. How do I fix it? Also, is it possible for me to login to Ubuntu using root account directly?

Answer: Let us address these two question one by one.

Warning: Enabling root is not recommended. If possible, you should always try to perform all administrative tasks using sudo.

Question 1: I’m unable to login using su command. How to fix this?

By default, root account password is locked in Ubuntu. So, when you do su -, you’ll get Authentication failure error message as shown below.

$ su - Password: su: Authentication failure

Enable super user account password on Ubuntu

First, set a password for root user as shown below.

$ sudo passwd root [sudo] password for ramesh: Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully

Now with the new password you can login as super user with su command

posted @ 2014-05-03 21:26 paulwong 阅读(397) | 评论 (0)编辑 收藏

Jersey Exception Handling

使用JERSEY框架输出JSON,需捕获所有的HTTP错误,如404等,业务错误及其他未定义的错误,将这些错误输出JSON,而不是TOMCAT的错误。
JERSEY已和SPRING整合。

web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee">

    <display-name>Restful Web Application</display-name>
    
    <servlet>
        <servlet-name>jersey-serlvet</servlet-name>
        <servlet-class>
            com.sun.jersey.spi.spring.container.servlet.SpringServlet
        </servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>restfullapi.rest.service,restfullapi.common.provider,restful.web</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
    
 
     <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    
    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/mvc-dispatcher-servlet.xml</param-value>
    </context-param>
    
    <!-- spring logback -->
    <context-param>
        <param-name>logbackConfigLocation</param-name>
        <param-value>classpath:logback.xml</param-value>
    </context-param>  
    <listener>
        <listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
    </listener>

    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>restfull-api</param-value>
    </context-param>
    
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
    

</web-app>


AbstractBaseRestfulException.java
public abstract class AbstractBaseRestfulException extends Exception{

    private static final long serialVersionUID = 6779508767332777451L;
    
    public AbstractBaseRestfulException()
    {
    }
    
    public AbstractBaseRestfulException(String message)
    {
        super(message);
    }

    public abstract String getErrcode();

    public abstract void setErrcode(String errcode);

    public abstract String getDescription();

    public abstract void setDescription(String description);
    

}


AbstractBaseRestfulExceptionMapper.java
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.paul.common.exception.AbstractBaseRestfulException;
import com.paul.common.json.DefaultJsonResponse;

@Provider
public class AbstractBaseRestfulExceptionMapper implements ExceptionMapper<AbstractBaseRestfulException>{

    private Logger logger = LoggerFactory.getLogger(AbstractBaseRestfulExceptionMapper.class);
    
    public Response toResponse(AbstractBaseRestfulException exception) {
        
        logger.error(exception.getMessage(), exception);
        
        DefaultJsonResponse<Object> response = new DefaultJsonResponse<Object>();
        response.setDescription(exception.getDescription());
        response.setErrcode(exception.getErrcode());
        response.setResult(null);
            
        return Response.status(Status.BAD_REQUEST)
                .entity(response)
                .type(MediaType.APPLICATION_JSON + ";charset=utf-8")
                .build();
    }

}


OtherExceptionMapper.java
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.paul.common.json.DefaultJsonResponse;
import com.paul.common.json.JsonResponseStatus;

@Provider
public class OtherExceptionMapper implements ExceptionMapper<Exception>{
    
    private Logger logger = LoggerFactory.getLogger(OtherExceptionMapper.class);

    public Response toResponse(Exception exception) {
        
        logger.error(exception.getMessage(), exception);
        
        DefaultJsonResponse<Object> response = new DefaultJsonResponse<Object>();
        response.setDescription(JsonResponseStatus.OTHER_ERROR.getMessage() + exception.getMessage());
        response.setErrcode(JsonResponseStatus.OTHER_ERROR.getCode());
        response.setResult(null);
            
        return Response.status(Status.BAD_REQUEST)
                .entity(response)
                .type(MediaType.APPLICATION_JSON + ";charset=utf-8")
                .build();
    }

}


WebApplicationExceptionMapper.java
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.ExceptionMapper;
import javax.ws.rs.ext.Provider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.paul.common.json.DefaultJsonResponse;

@Provider
public class WebApplicationExceptionMapper implements ExceptionMapper<WebApplicationException >{

    private Logger logger = LoggerFactory.getLogger(WebApplicationExceptionMapper.class);
    
    public Response toResponse(WebApplicationException exception) {
        
        logger.error(exception.getMessage(), exception);
        
        DefaultJsonResponse<Object> response = new DefaultJsonResponse<Object>();
        response.setDescription(exception.getMessage());
        response.setErrcode(String.valueOf(exception.getResponse().getStatus()));
        response.setResult(null);
            
        return Response.status(exception.getResponse().getStatus())
                .entity(response)
                .type(MediaType.APPLICATION_JSON + ";charset=utf-8")
                .build();
    }

}


Controller中无须再处理异常
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.paul.common.json.DefaultJsonResponse;
import com.paul.common.json.JsonResponseStatus;
import com.paul.program.stbstart.valueobject.StbStart;
import com.paul.stbstart.valueobject.StbStartRequest;
import com.paul.restfullapi.rest.service.AdvertisementRestfulService;

@Path("/advertisement")
@Controller
public class AdvertisementRestfulController {
    
    private Logger logger = LoggerFactory.getLogger(AdvertisementRestfulController.class);
    
    @Autowired
    AdvertisementRestfulService advertisementRestfulService;
    
    @Path("/getAdvertisement")
    @Produces({MediaType.APPLICATION_JSON + ";charset=utf-8"})
    @GET
    public DefaultJsonResponse<StbStart> getAdvertisement(
            @DefaultValue("") @QueryParam("version")String version,
            @QueryParam("token")String token) throws Exception
    {
        DefaultJsonResponse<StbStart> response = new DefaultJsonResponse<StbStart>();
        StbStartRequest request = new StbStartRequest();
        logger.info(version);
        request.setVersion(version);
        request.setToken(token);
        StbStart result = advertisementRestfulService.findByVersion(request);
        response.setResult(result);
        response.setDescription(JsonResponseStatus.SUCCESS.getMessage());
        response.setErrcode(JsonResponseStatus.SUCCESS.getCode());
        
        logger.info("----------------");
//        double i = 1/0;
        return response;
    }
    

}







posted @ 2014-04-28 14:44 paulwong 阅读(1274) | 评论 (0)编辑 收藏

Mongodb数据更新命令、操作符

一、Mongodb数据更新命令

Mongodb更新有两个命令:update、save。

1.1update命令

update命令格式:

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

参数说明:

criteria:查询条件

objNew:update对象和一些更新操作符

upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。

multi:默认是false,只更新找到的第一条记录。如果为true,把按条件查询出来的记录全部更新。

 

示例:

Shell代码  收藏代码
  1. > db.classes.insert({"name":"c1","count":30})  
  2. > db.classes.insert({"name":"c2","count":30})  
  3. > db.classes.find()  
  4. { "_id" : ObjectId("5030f3a3721e16c4ab180cd9"), "name" : "c1", "count" : 30 }  
  5. { "_id" : ObjectId("5030f3ab721e16c4ab180cda"), "name" : "c2", "count" : 30 }  
  6. >   

示例1:把count大于20的class name修改为c3

Shell代码  收藏代码
  1. > db.classes.update({"count":{$gt:20}},{$set:{"name":"c3"}})  
  2. > db.classes.find()  
  3. { "_id" : ObjectId("5030f3a3721e16c4ab180cd9"), "name" : "c3", "count" : 30 }  
  4. { "_id" : ObjectId("5030f3ab721e16c4ab180cda"), "name" : "c2", "count" : 30 }  
  5. >   

由于没有指定upsert和multi的值,所以全部默认为false,由结果可以看出,只修改了第一条符合条件的记录。

示例2:把count大于20的class name修改为c4,设置multi为true

Shell代码  收藏代码
  1. > db.classes.update({"count":{$gt:20}},{$set:{"name":"c4"}},false,true)  
  2. > db.classes.find()  
  3. { "_id" : ObjectId("5030f3a3721e16c4ab180cd9"), "name" : "c4", "count" : 30 }  
  4. { "_id" : ObjectId("5030f3ab721e16c4ab180cda"), "name" : "c4", "count" : 30 }  
  5. >   

由于指定了multi为true,所以对两条符合条件的记录都进行了更新。

示例3: 把count大于50的class name修改为c5,设置upsert为true

Shell代码  收藏代码
  1. > db.classes.update({"count":{$gt:50}},{$set:{"name":"c5"}},true,false)  
  2. > db.classes.find()  
  3. { "_id" : ObjectId("5030f3a3721e16c4ab180cd9"), "name" : "c4", "count" : 30 }  
  4. { "_id" : ObjectId("5030f3ab721e16c4ab180cda"), "name" : "c4", "count" : 30 }  
  5. { "_id" : ObjectId("5030f589ce8fa8884e6cd441"), "name" : "c5" }  
  6. >   

在集合中没有count大于50的记录,但是由于指定了upsert为true,如果找不到则会插入一条新记录。

1.2save命令

Mongodb另一个更新命令是save,格式如下:

db.collection.save(obj)

obj代表需要更新的对象,如果集合内部已经存在一个和obj相同的"_id"的记录,Mongodb会把obj对象替换集合内已存在的记录,如果不存在,则会插入obj对象。

这条命令比较简单,示例就省略了。

 

二、数据更新操作符

1.$inc

用法:{$inc:{field:value}}

作用:对一个数字字段的某个field增加value

示例:将name为chenzhou的学生的age增加5

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 22 }  
  3. #查询结果显示年龄为22  
  4. > db.students.update({name:"chenzhou"},{$inc:{age:5}})  
  5. #执行修改,把age增加5  
  6. > db.students.find()  
  7. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 }  
  8. >   
  9. #查询结果显示年龄为27,修改成功  

2.$set

用法:{$set:{field:value}}

作用:把文档中某个字段field的值设为value

示例: 把chenzhou的年龄设为23岁

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 }  
  3. > db.students.update({name:"chenzhou"},{$set:{age:23}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 }  
  6. >   

从结果可以看到,更新后年龄从27变成了23

3.$unset

用法:{$unset:{field:1}}

作用:删除某个字段field

示例: 将chenzhou的年龄字段删除

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 }  
  3. > db.students.update({name:"chenzhou"},{$unset:{age:1}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }  
  6. >   

4.$push

用法:{$push:{field:value}}

作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型

示例:给chenzhou添加别名"michael"

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$push:{"ailas":"Michael"}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }  
  6. >   

由结果可以看到,记录中追加了一个数组类型字段alias,且字段有一个为"Michael"的值

5.pushAll

用法:{$pushAll:{field:value_array}}

作用:用法同$push一样,只是$pushAll可以一次追加多个值到一个数组字段内。

示例:给chenzhou追加别名A1,A2

 

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pushAll:{"ailas":["A1","A2"]}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }  
  6. >   

6.$addToSet

用法:{$addToSet:{field:value}}

作用:加一个值到数组内,而且只有当这个值在数组中不存在时才增加。

示例:往chenzhou的别名字段里添加两个别名A3、A4 

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$addToSet:{"ailas":["A3","A4"]}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  6. >   

由结果可以看出,更新后ailas字段里多了一个对象,这个对象里包含2个数据,分别是A3、A4

7.$pop

用法:删除数组内第一个值:{$pop:{field:-1}}、删除数组内最后一个值:{$pop:{field:1}}

作用:用于删除数组内的一个值

示例: 删除chenzhou记录中alias字段中第一个别名

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pop:{"ailas":-1}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  6. >   

由结果可以看书,第一个别名Michael已经被删除了。

我们再使用命令删除最后一个别名:

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pop:{"ailas":1}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }  
  6. >   

由结果可以看出,alias字段中最后一个别名["A3","A4"]被删除了。

8.$pull

用法:{$pull:{field:_value}}

作用:从数组field内删除一个等于_value的值

示例:删除chenzhou记录中的别名A1

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pull:{"ailas":"A1"}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A2" ], "name" : "chenzhou" }  
  6. >   

9.$pullAll

用法:{$pullAll:value_array}

作用:用法同$pull一样,可以一次性删除数组内的多个值。

示例: 删除chenzhou记录内的所有别名

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$pullAll:{"ailas":["A1","A2"]}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" }  
  6. >   

可以看到A1和A2已经全部被删除了

10.$rename

用法:{$rename:{old_field_name:new_field_name}}

作用:对字段进行重命名

示例:把chenzhou记录的name字段重命名为sname

Shell代码  收藏代码
  1. > db.students.find()  
  2. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" }  
  3. > db.students.update({name:"chenzhou"},{$rename:{"name":"sname"}})  
  4. > db.students.find()  
  5. { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "sname" : "chenzhou" }  
  6. >   

由结果可以看出name字段已经被更新为sname了。

posted @ 2014-04-22 16:10 paulwong 阅读(291) | 评论 (0)编辑 收藏

整合测试

http://arquillian.org/guides/getting_started_zh_cn/

posted @ 2014-04-20 10:33 paulwong 阅读(610) | 评论 (0)编辑 收藏

仅列出标题
共116页: First 上一页 55 56 57 58 59 60 61 62 63 下一页 Last