Java 操作mongodb
package cn.test.db; import java.io.File;
import java.io.IOException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;
import com.mongodb.gridfs.GridFSInputFile;
import com.mongodb.util.JSON; /**
* 需引入jar包 :地址https://github.com/mongodb/mongo-java-driver/downloads
* 根据服务器所安装版本下载对应即可>>>
*
*查看版本方式:[root@vmu010226-node1 ~]# mongo version
*/ public class App { /**
* 连接库 test
*
* @return
* @throws UnknownHostException
* @throws MongoException
*/
public static DB getDb() throws UnknownHostException, MongoException {
// 实例化Mongo对象,连接27017端口
Mongo mongo = new Mongo("10.1.207.110", 27017);
// 连接名为test的数据库,假如数据库不存在的话,mongodb会自动建立
DB db = mongo.getDB("test");
return db;
} /**
* 获取所有的集合名
*
* @throws MongoException
* @throws UnknownHostException
*/
public void getCollectionName() throws MongoException, UnknownHostException {
Set<String> collections = getDb().getCollectionNames();
for (String collectionName : collections) {
System.out.println("collectionName=" + collectionName);
}
} /**
* 与集合名为game的取得连接
*
* @return
* @throws UnknownHostException
* @throws MongoException
*/
public static DBCollection getCollection() throws UnknownHostException,
MongoException {
DBCollection collection = getDb().getCollection("game");
return collection;
} /**
* insert 第一种方法,是使用BasicDBObjec
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void insertByBasicDBObject() throws MongoException,
UnknownHostException {
BasicDBObject document = new BasicDBObject();
document.put("id", 1);
document.put("name", "测试数据no1");
document.put("content", "评价no1");
document.put("score", 5000);
BasicDBObject documentDetail = new BasicDBObject();
documentDetail.put("records", "99");
documentDetail.put("index", "vps_index1");
documentDetail.put("active", "true");
document.put("detail", documentDetail);
getCollection().insert(document);
/***
* 输出结果 :{ "_id" : ObjectId("547536e291812694b70f5059"), "id" : 1,
* "name" : "测试数据no1", "content" : "评价no1", "score" : 5000, "detail" : {
* "records" : "99", "index" : "vps_index1", "active" : "true" } }
*/
} /**
* insert 第二种方法,是使用BasicDBObjectBuilder
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void insertByBasicDBObjectBuilder() throws MongoException,
UnknownHostException {
BasicDBObjectBuilder documentBuilder = BasicDBObjectBuilder.start()
.add("id", 2).add("name", "测试数据no2").add("content", "评价no2")
.add("score", 5000);
BasicDBObjectBuilder documentBuilderDetail = BasicDBObjectBuilder
.start().add("records", "100").add("index", "vps_index2").add(
"active", "true");
documentBuilder.add("detail", documentBuilderDetail.get());
getCollection().insert(documentBuilder.get());
/***
* 输出结果 :{ "_id" : ObjectId("547539009181903d3a37ddeb"), "id" : 2,
* "name" : "测试数据no2", "content" : "评价no2", "score" : 5000, "detail" : {
* "records" : "100", "index" : "vps_index2", "active" : "true" } }
*/
} /**
* insert 第三种方法,是使用Map
*
* @throws MongoException
* @throws UnknownHostException
*/
@SuppressWarnings("unchecked")
public static void insertByMap() throws MongoException,
UnknownHostException {
Map documentMap = new HashMap();
documentMap.put("id", 3);
documentMap.put("name", "测试数据no3");
documentMap.put("content", "评价no3");
documentMap.put("score", 5000);
Map documentMapDetail = new HashMap();
documentMapDetail.put("records", "99");
documentMapDetail.put("index", "vps_index3");
documentMapDetail.put("active", "true");
documentMap.put("detail", documentMapDetail);
getCollection().insert(new BasicDBObject(documentMap));
/**
* 输出结果:{ "_id" : ObjectId("547539ff9181629953cc678c"), "content" :
* "评价no3", "id" : 3, "detail" : { "index" : "vps_index3", "active" :
* "true", "records" : "99" }, "name" : "测试数据no3", "score" : 5000 }
*/
} /**
* insert 第四种方法,直接使用json格式
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void insertByJson() throws MongoException,
UnknownHostException {
String json = "{'database' : 'mkyongDB','table' : 'hosting',"
+ "'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
DBObject dbObject = (DBObject) JSON.parse(json);
getCollection().insert(dbObject);
/**
* 输出结果:{ "_id" : ObjectId("54753abd91810ba1daa7ff0f"), "database" :
* "mkyongDB", "table" : "hosting", "detail" : { "records" : 99, "index"
* : "vps_index1", "active" : "true" } }
*/
} /****
*
* game集合里面现在的数据为 > db.game.find() { "_id" :
* ObjectId("547443c4c9158f23e626927f"), "name" : "my hero", "content" :
* "are you sure?", "score" : 20000 } { "_id" :
* ObjectId("54752f5f9181f945548b2375"), "id" : 1001, "name" : "啦啦啦啦啦啦啦",
* "content" : "hello world mongoDB in Java", "score" : 1 } { "_id" :
* ObjectId("547530ac9181d6f709a151f0"), "id" : 1001, "name" : "啦啦啦啦啦啦啦",
* "content" : "hello world mongoDB in Java", "score" : 1 } { "_id" :
* ObjectId("547536e291812694b70f5059"), "id" : 1, "name" : "测试数据no1",
* "content" : "评价no1", "score" : 5000, "detail" : { "records" : "99",
* "index" : "vps_index1", "active" : "true" } } { "_id" :
* ObjectId("547539009181903d3a37ddeb"), "id" : 2, "name" : "测试数据no2",
* "content" : "评价no2", "score" : 5000, "detail" : { "records" : "100",
* "index" : "vps_index2", "active" : "true" } } { "_id" :
* ObjectId("547539ff9181629953cc678c"), "content" : "评价no3", "id" : 3,
* "detail" : { "index" : "vps_index3", "active" : "true", "records" : "99"
* }, "name" : "测试数据no3", "score" : 5000 } { "_id" :
* ObjectId("54753abd91810ba1daa7ff0f"), "database" : "mkyongDB", "table" :
* "hosting", "detail" : { "records" : 99, "index" : "vps_index1", "active"
* : "true" } }
*
*/
// 更新 ............. /**
* update
*
* @param args
* @throws UnknownHostException
* @throws MongoException
* 使用BasicDBObject对象,并为其赋值了新的值后,然后使用collection的update方法,即可更新该对象
*/
public static void update_1() throws MongoException, UnknownHostException {
// ** 将这条数据更新 { "_id" : ObjectId("547443c4c9158f23e626927f"), "name" :
// "my hero", "content" : "are you sure?", "score" : 20000 }
BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "my new hero");
newDocument.put("content", "这是我的新英雄!");
newDocument.put("score", 15400);
getCollection().update(new BasicDBObject().append("name", "my hero"),
newDocument);
/**
* 输出结果 :{ "_id" : ObjectId("547443c4c9158f23e626927f"), "name" :
* "my new hero", "content" : "这是我的新英雄!", "score" : 15400 }
*/
} /***
*
* 还可以使用mongodb中的$inc修饰符号去对某个值进行更新,比如,要将name值为my new
* hero的document的score的值得更新为16000(即15400+4600=16000)
*
* @param args
* @about "$inc"更新修改器 可作为计数器
*/
public static void update_inc() throws MongoException, UnknownHostException {
/**
* 初始{ "_id" : ObjectId("547443c4c9158f23e626927f"), "name" :
* "my new hero", "content" : "这是我的新英雄!", "score" : 15400 }
*/
BasicDBObject newDocument = new BasicDBObject().append("$inc",
new BasicDBObject().append("score", 4600));
getCollection().update(
new BasicDBObject().append("name", "my new hero"), newDocument);
/**
* 输出结果 :{ "_id" : ObjectId("547443c4c9158f23e626927f"), "name" :
* "my new hero", "content" : "这是我的新英雄!", "score" : 20000 }
*/
} /**
* "$set" 可添加字段内容
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void update_set() throws MongoException, UnknownHostException {
BasicDBObject newDocument = new BasicDBObject().append("$set",
new BasicDBObject().append("useset", "使用$set"));
getCollection().update(
new BasicDBObject().append("name", "my new hero"), newDocument);
/**
* 输出结果 :{ "_id" : ObjectId("547443c4c9158f23e626927f"), "name" :
* "my new hero", "content" : "这是我的新英雄!", "score" : 20000, "useset" :
* "使用$set" }
*/
} /**
* "$unset" 可删除字段内容
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void update_unset() throws MongoException,
UnknownHostException {
BasicDBObject newDocument = new BasicDBObject().append("$unset",
new BasicDBObject().append("useset", "使用$set"));
getCollection().update(
new BasicDBObject().append("name", "my new hero"), newDocument);
/**
* 输出结果 :{ "_id" : ObjectId("547443c4c9158f23e626927f"), "name" :
* "my new hero", "content" : "这是我的新英雄!", "score" : 20000 }
*/
} /**
* 批量更新
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void update_multi() throws MongoException,
UnknownHostException {
// 将id为1001的数据的score更新为999999
/**
* 初始值:{ "_id" : ObjectId("54752f5f9181f945548b2375"), "id" : 1001,
* "name" : "啦啦啦啦啦啦啦", "content" : "hello world mongoDB in Java",
* "score" : 1 } { "_id" : ObjectId("547530ac9181d6f709a151f0"), "id" :
* 1001, "name" : "啦啦啦啦啦啦啦", "content" : "hello world mongoDB in Java",
* "score" : 1 }
*/
BasicDBObject updateQuery = new BasicDBObject().append("$set",
new BasicDBObject().append("score", 999999));
getCollection().update(new BasicDBObject().append("id", 1001),
updateQuery, false, true);
/**
* 输出结果 { "_id" : ObjectId("54752f5f9181f945548b2375"), "id" : 1001,
* "name" : "啦啦啦啦啦啦啦", "content" : "hello world mongoDB in Java",
* "score" : 999999 } { "_id" : ObjectId("547530ac9181d6f709a151f0"),
* "id" : 1001, "name" : "啦啦啦啦啦啦啦", "content" :
* "hello world mongoDB in Java", "score" : 999999 }
*/
} // 查询 /**
* 查询Document
*
* 先用下面的代码往数据库中插入1-10数字:
*/ public static void init() throws MongoException, UnknownHostException { for (int i = 1; i <= 10; i++) {
getCollection().insert(new BasicDBObject().append("number", i));
}
/**
* 结果为: { "_id" : ObjectId("547562c991818dbe4d036486"), "number" : 1 } {
* "_id" : ObjectId("547562c991818dbe4d036487"), "number" : 2 } { "_id"
* : ObjectId("547562c991818dbe4d036488"), "number" : 3 } { "_id" :
* ObjectId("547562c991818dbe4d036489"), "number" : 4 } { "_id" :
* ObjectId("547562c991818dbe4d03648a"), "number" : 5 } { "_id" :
* ObjectId("547562c991818dbe4d03648b"), "number" : 6 } { "_id" :
* ObjectId("547562c991818dbe4d03648c"), "number" : 7 } { "_id" :
* ObjectId("547562c991818dbe4d03648d"), "number" : 8 } { "_id" :
* ObjectId("547562c991818dbe4d03648e"), "number" : 9 } { "_id" :
* ObjectId("547562c991818dbe4d03648f"), "number" : 10 }
*/
} /**
* 查询第一个数据
*
* @throws MongoException
* @throws UnknownHostException
*/
public static void findOne() throws MongoException, UnknownHostException {
DBObject dbObject = getCollection().findOne(); // 等同于mongo 执行
// db.game.findOne()
System.out.println(dbObject);
/**
* 输出结果 :{ "_id" : ObjectId("547562c991818dbe4d036486"), "number" : 1 }
*/ } /**
* 获得document的集合
*
* @param
* @throws MongoException
* @throws UnknownHostException
*/ public static void getDocCollections() throws UnknownHostException,
MongoException {
DBCursor cursor = getCollection().find();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
/***
* 输出结果为:{ "_id" : { "$oid" : "547562c991818dbe4d036486"} , "number" :
* 1} { "_id" : { "$oid" : "547562c991818dbe4d036487"} , "number" : 2} {
* "_id" : { "$oid" : "547562c991818dbe4d036488"} , "number" : 3} {
* "_id" : { "$oid" : "547562c991818dbe4d036489"} , "number" : 4} {
* "_id" : { "$oid" : "547562c991818dbe4d03648a"} , "number" : 5} {
* "_id" : { "$oid" : "547562c991818dbe4d03648b"} , "number" : 6} {
* "_id" : { "$oid" : "547562c991818dbe4d03648c"} , "number" : 7} {
* "_id" : { "$oid" : "547562c991818dbe4d03648d"} , "number" : 8} {
* "_id" : { "$oid" : "547562c991818dbe4d03648e"} , "number" : 9} {
* "_id" : { "$oid" : "547562c991818dbe4d03648f"} , "number" : 10}
*/
} /**
* 获得document集合的总数
*
* @throws UnknownHostException
* @throws MongoException
*/
public static void getDocCount() throws UnknownHostException,
MongoException {
DBCursor cursor = getCollection().find();
System.out.println(cursor.count());
} /**
* 根据条件取document
*
* @throws UnknownHostException
* @throws MongoException
*/
@SuppressWarnings("unchecked")
public static void getDocCollectionsByCondition()
throws UnknownHostException, MongoException {
BasicDBObject query = new BasicDBObject();
query.put("number", 5); // 取number 为5的document
DBCursor cursor = getCollection().find(query);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}// 输出结果:{ "_id" : { "$oid" : "547562c991818dbe4d03648a"} , "number" :
// 5}
/**
* 使用 "$in"
*/
BasicDBObject query_in = new BasicDBObject();
List list_in = new ArrayList();
list_in.add(9);
list_in.add(10);
query_in.put("number", new BasicDBObject("$in", list_in)); // 取number等于9和10的数据
DBCursor cursor_in = getCollection().find(query_in);
while (cursor_in.hasNext()) {
System.out.println(cursor_in.next());// 输出结果:{ "_id" : { "$oid" :
// "547562c991818dbe4d03648e"}
// , "number" : 9}
// { "_id" : { "$oid" : "547562c991818dbe4d03648f"} , "number" : 10}
}
/*
* 使用>,<等比较符号 "$lt" "$lte" "$gt" "$gte" "$ne" //小于 小于等于 大于 大于等于 不等于
*/
BasicDBObject query_gt = new BasicDBObject();
query_gt.put("number", new BasicDBObject("$gt", 5).append("$lte", 8)); // 大于5小于8
DBCursor cursor_gt = getCollection().find(query_gt);
while (cursor_gt.hasNext()) {
System.out.println(cursor_gt.next());// 输出结果:{ "_id" : { "$oid" :
// "547562c991818dbe4d03648b"}
// , "number" : 6}
// { "_id" : { "$oid" : "547562c991818dbe4d03648c"} , "number" : 7}
// { "_id" : { "$oid" : "547562c991818dbe4d03648d"} , "number" : 8}
} } /**
* 删除操作
*/
@SuppressWarnings("unchecked")
public static void removeFirstOne() throws MongoException,
UnknownHostException {
// 删除第一个document
DBObject dbObject = getCollection().findOne();
getCollection().remove(dbObject); // 删除指定的document
BasicDBObject document = new BasicDBObject();
document.put("number", 2);
getCollection().remove(document); // 使用$in 删除多个document
BasicDBObject query_in = new BasicDBObject();
List list_in = new ArrayList();
list_in.add(9);
list_in.add(10);
query_in.put("number", new BasicDBObject("$in", list_in)); // 先取number等于9和10的数据
getCollection().remove(query_in); // 删除所有的document
DBCursor cursor = getCollection().find();
while (cursor.hasNext()) {
getCollection().remove(cursor.next());
}
} /**
* 保存图片
*
* @throws IOException
*/
public static void savePhoto() throws IOException {
String newFileName = "test-mongo-image";
File imageFile = new File("C:\\Users\\xiao\\Desktop\\pda\\logo.gif");
GridFS gfsPhoto = new GridFS(getDb(), "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
gfsFile.save();
} /**
* 读取图片
*
* @throws UnknownHostException
* @throws MongoException
*/
public static void readPhoto() throws UnknownHostException, MongoException {
String newFileName = "test-mongo-image";
GridFS gfsPhoto = new GridFS(getDb(), "photo");
GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
System.out.println(imageForOutput);
/**
*
*
*输出结果:{ "_id" : { "$oid" : "54756e479181e6adf838e1f0"} , "chunkSize" :
* 262144 , "length" : 5238 , "md5" : "a47baf8201db57a790c91c88329aaa69"
* , "filename" : "test-mongo-image" , "contentType" : null ,
* "uploadDate" : { "$date" : "2014-11-26T06:08:07.047Z"} , "aliases" :
* null }
*
*
*/
} /**
* 读取所有的图片
*
* @throws UnknownHostException
* @throws MongoException
*/
public static void readAllPhoto() throws UnknownHostException,
MongoException {
GridFS gfsPhoto = new GridFS(getDb(), "photo");
DBCursor cursor = gfsPhoto.getFileList();
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
} /**
* 从数据库读取后写入到磁盘上
*
* @throws IOException
*/
public static void readToWrite() throws IOException {
String newFileName = "test-mongo-image";
GridFS gfsPhoto = new GridFS(getDb(), "photo");
GridFSDBFile imageForOutput = gfsPhoto.findOne(newFileName);
imageForOutput.writeTo("c:\\JavaWebHostingNew.png");
} /**
* 删除图片
*
* @throws UnknownHostException
* @throws MongoException
*/
public static void removePhotos() throws UnknownHostException,
MongoException {
String newFileName = "test-mongo-image";
GridFS gfsPhoto = new GridFS(getDb(), "photo");
gfsPhoto.remove(gfsPhoto.findOne(newFileName));
} public static void main(String[] args) throws Exception {
/**
* 插入 4种方式
*/
// insertByBasicDBObject();
// insertByBasicDBObjectBuilder();
// insertByMap();
// insertByJson();
/**
* 更新
* */
// update_1();
// update_inc();
// update_set();
// update_unset();
// update_multi();
/**
* 初始化需要查询的数据
*/
// init();
// findOne();
// getDocCollections();
// getDocCount();
// getDocCollectionsByCondition();
// removeFirstOne(); /**
* 图片操作
*/
// savePhoto();
// readPhoto();
// readAllPhoto();
// readToWrite();
// removePhotos();
System.out.println("done...."); }
} 源码地址:http://download.csdn.net/detail/u010497606/8200295
Java 操作mongodb的更多相关文章
- 【MongoDB for Java】Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...
- JAVA操作MongoDB数据库
1. 首先,下载MongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads 2.Java操作Mo ...
- [转]MongoDB for Java】Java操作MongoDB
原文地址: MongoDB for Java]Java操作MongoDB 开发环境: System:Windows IDE:eclipse.MyEclipse 8 Database:mongoDB 开 ...
- Java操作MongoDB
上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html 介绍到了在MongoDB的控制台完成MongoDB的数据操作,通 ...
- Mongodb快速入门之使用Java操作Mongodb
[IT168 专稿]在上一篇文章中,我们学习了Mongodb的安装和初步使用,在本文中,将学习如何使用Java去编程实现对Mongodb的操作. HelloWorld程序 学习任何程序的第一步,都是编 ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- 浅谈如何用Java操作MongoDB
NoSQL数据库因其可扩展性使其变得越来越流行,利用NoSQL数据库可以给你带来更多的好处,MongoDB是一个用C++编写的可度可扩展性的开源NoSQL数据库.本文主要讲述如何使用Java操作Mon ...
- java操作mongodb(连接池)(转)
原文链接: java操作mongodb(连接池) Mongo的实例其实就是一个数据库连接池,这个连接池里默认有10个链接.我们没有必要重新实现这个链接池,但是我们可以更改这个连接池的配置.因为Mong ...
- Java操作Mongodb(转载)
好文章,值得收藏 HelloWorld程序 学习任何程序的第一步,都是编写HelloWorld程序,我们也不例外,看下如何通过Java编写一个HelloWorld的程序. 首先,要通过Java操作Mo ...
- java 操作mongodb查询条件的常用设置
java操作mongodb进行查询,常用筛选条件的设置如下: 条件列表:BasicDBList condList = new BasicDBList(); 临时条件对象:BasicDBObject c ...
随机推荐
- 走进Groovy (二)
承接上一篇,配置好环境后,开始正式学习语法.我假设看此文的同学至少会一定的JAVA语法,因此一些太过基础的就不记录了,基本上,大家看看示例就明白了. Groovy的卖点之一,就是全兼容JAVA的语法, ...
- 转: git常用命令
# git配置 #---------------------------------------------- #配置用户名和邮箱: $ git config --global user.name & ...
- Android快速开发框架——AndroidAnnotations(Code Diet)
简介:AndroidAnnotations是一个依赖注入方式来简化代码结构 ,快速开发的开源框架,使结构代码更清晰,减少代码重复性.对今后我们做自动化测试和自动化埋点开发都会提高开发效率.跟我们之前使 ...
- hdu 4105 贪心思想
淋漓尽致的贪心思想 波谷一定是一位数.波峰一位数不够大的时候加入到两位数就一定够大了的. 当在寻找波谷碰到零了就自然当成波谷. 当在寻找波峰时碰到零时,将前面的波谷加到前一个波峰上.让当前的零做波谷, ...
- Ubuntu 用 pptp 建立 vpn 服务
1.下载pptp sudo apt-get install pptpd 2.配置pptp 须要改动配置下面的文件: pptpd.conf文件:配置链接后的主机ip和能够分配的内存范围 vi /etc/ ...
- vector中resize和reserve的区别,代码验证
#include <vector> using namespace std; int main() { vector<int> resizeVect; vector<in ...
- Struts2中获取HttpServletRequest,HttpSession等的几种方式
转自:http://www.kaifajie.cn/struts/8944.html package com.log; import java.io.IOException; import java. ...
- C#指定目录存放DLL
C#开发中,常常会用到不少扩展库,把这些扩展库的大量DLL放在软件目录下面,非常不美观. 通过设置自定义的DLL存放目录,可以把DLL存在指定的目录下面. 代码如下: <?xml version ...
- shopnc b2b2c如何开启伪静态??
shopnc b2b2c开启伪静态的方法 一. windows环境下 1.先下载isapi rewrite插件,安装,然后我们把根目录下面的htaccess.txt那么修改成.htaccess即可. ...
- 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本、内核、当前时间
申请博客有一段时间了,然而到现在还一篇没有写过..... 主要因为没有想到需要写些什么,最近在学习Python语言,照着书上看了看最基础的东西,发现根本看不进去,而且光看的话今天看了觉得都理解懂了,过 ...