- 浏览: 1776499 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
今天去 海图 买了本 mongodb 权威指南 ....
好热啊 好困啊 .... 睡觉去了... 晚上再看....
谁有分布式应用 开发的 demo 或者文档 能给我发点不...
前天下午与 昨天 跑了2次 动物园 海洋馆 .....
累 啊 小孩却很 精神 ...... 难过
- javascript_王者归来.rar (1 MB)
- 下载次数: 27
评论
6 楼
vb2005xu
2011-06-07
http://code.google.com/p/redis/
http://wenku.baidu.com/view/a770f6878762caaedd33d4ff.html
http://developer.51cto.com/art/201104/255093.htm
http://wenku.baidu.com/view/a770f6878762caaedd33d4ff.html
http://developer.51cto.com/art/201104/255093.htm
5 楼
vb2005xu
2011-06-06
引用
Mongoose – 让NodeJS更容易操作Mongodb数据库
Mongoose是什么
Mongoose是MongoDB的一个对象模型工具,可以工作于异步环境下。
定义一个模型很容易:
var Comments = new Schema({
title : String
, body : String
, date : Date
});
var BlogPost = new Schema({
author : ObjectId
, title : String
, body : String
, date : Date
, comments : [Comments]
, meta : {
votes : Number
, favs : Number
}
});
mongoose.model('BlogPost', BlogPost);
安装
推荐通过NPM方式安装:
$ npm install mongoose
或者,你可以从Github仓库中获取代码,然后解压:
$ git clone git@github.com:LearnBoost/mongoose.git support/mongoose/
// 将模块添加至NodeJS可以找到的环境路径中
require.paths.unshift('support/mongoose/lib');
然后就可以在应用中将mongoose模块包含进来
require('mongoose');
连接到MongoDB数据库
首先,我们需要定义一个连接。如果你的应用只使用一个数据库,可以使用mongoose.connect,如果需要创建附加数据库连接,使用mongoose.createConnection。
connect和createConnection都能连接mongodb数据库,支持以URI或参数(host,database,port)的形式。
var mongoose = require('mongoose');
mongoose.connect('mongodb://www.csser.com/csser.com_database');
连接一旦建立成功,该连接实例的open事件就被触发。如果你使用的是mongoose.connect方式,连接对象为mongoose.connection;否则,mongoose.createConnection返回的是Connection对象。
切记!Mongoose在与数据库真正建立连接之前便缓存了所有的命令,这就意味着你在定义模型、执行查询时不必非要确认与MongoDB数据库的连接是否已经建立。(一回@CSSer注:异步是MongoDB等与传统数据库的重大区别)
定义模型
模型是通过模式接口(Schema interface)定义的,如:
var Schema = mongoose.Schema
, ObjectId = Schema.ObjectId;
var BlogPost = new Schema({
author : ObjectId
, title : String
, body : String
, date : Date
});
除了定义文档结构和你要存储的数据类型外,模式(Schema)还用于以下定义:
* Validators (异步和同步)
* Defaults – 默认值
* Getters
* Setters
* Indexes – 索引
* Middleware – 中间件
* Methods definition – 方法定义
* Statics definition – 静态定义
* Plugins – 插件
下面的代码向我们展示了这些功能的一部分:
var Comment = new Schema({
name : { type: String, default: 'hahaha' }
, age : { type: Number, min: 18, index: true }
, bio : { type: String, match: /[a-z]/ }
, date : { type: Date, default: Date.now }
});
// 定义setter
Comment.path('name').set(function (v) {
return v.capitalize();
});
// 定义中间件
Comment.pre('save', function (next) {
notify(this.get('email'));
next();
});
你可以查看几乎包含所有模型定义的示例。
访问模型
当通过mongoose.model(‘ModelName’, mySchema)定义了一个模型之后,我们可以通过相同的函数来访问它:
var myModel = mongoose.model('ModelName');
接下来我们可以将模型的实例保存下来:
var instance = new myModel();
instance.my.key = 'csser';
instance.save(function (err) {
//
});
或者我们也可以从同样的的集合(collection)中找到文档(documents):
myModel.find({}, function (err, docs) {
// docs.forEach
});
也可以调用findOne, findById, update等等方法,更多的细节请阅读API文档。
嵌入文档
还记得在第一个示例的代码片段中,我们在模式中定义了一个键(key):
comments: [Comments]
这里的Comments是我们已经创建的模式(Schema),这就是说创建嵌入文档跟下面的代码看起来一样简单:
// 重新获得模型
var BlogPost = mongoose.model('BlogPost');
// 创建一篇博客日志
var post = new BlogPost();
// 创建一个评论
post.comments.push({ title: 'My comment for csser.com' });
post.save(function (err) {
if (!err) console.log('Success!');
});
用同样的方式删除模式:
BlogPost.findById(myId, function (err, post) {
if (!err) {
post.comments[0].remove();
post.save(function (err) {
// do something
});
}
});
嵌入文档拥有与模型相同的功能,包括Defaults、validators、middleware等。当发生错误时,它会冒泡到save()错误回调函数,这里错误处理是一个单元。
Mongoose interacts with your embedded documents in arrays atomically, out of the box.
中间件
中间件是Mongoose 1.0推出的最激动人心的功能之一,它让我们可以不用再受嵌套回调函数的折磨了。
中间件定义在模式级别(Schema level),当方法初始化时(文档与MongoDB数据初始化后)、保存数据时(文档或嵌入文档保存后)生效。
中间件有两种类型,它们由定义的函数签名确定(即函数接受的参数)。
顺序(Serial)中间件定义如下:
.pre(method, function (next) {
// ...
})
当每个中间件调用下一个时,它们按顺序执行。
并行(Parallel)中间件提供更细粒度的控制,其定义如下:
.pre(method, function (next, done) {
// ...
})
Parallel 中间件可以立刻next(),但是只有当所有parallel中间件调用done()之后最后的参数才被执行。
错误处理
如果任一个中间件调用next或done时抛出了错误,执行流会中断,错误会被作为参数传入回调函数。
例如:
schema.pre('save', function (next) {
// 发生了一些错误
next(new Error('有错误发生'));
});
// 接着...
myModel.save(function (err) {
// 错误可以来自某个中间件
});
4 楼
vb2005xu
2011-06-06
http://howtonode.org/express-mongodb nodejs 与 mondb 已经 express 框架的集成
3 楼
vb2005xu
2011-06-06
nodejs 与 mongodb 的样例
var http = require("http"), mongo = require("mongodb"), events = require("events"); http.createServer(function(req, res) { var products_emitter = new events.EventEmitter(), // 创建到northwind数据库的链接。相当于use northwind db = new mongo.Db("northwind", new mongo.Server('localhost', 27017, {}), {}); var listener = function(products) { var html = [], len = products.length; html.push('<!DOCTYPE html>'); html.push('<html>'); html.push('<head>'); html.push('<title>Nodejs</title>'); html.push('</head>'); html.push('<body>'); if(len > 0) { html.push('<ul>'); for(var i = 0; i < len; i++) { html.push('<li>' + products[i].name + '</li>'); } html.push('</ul>'); } html.push('</body>'); html.push('</html>'); res.writeHead(200, "Content-Type: text/html"); res.write(html.join('')); res.end(); clearTimeout(timeout); } products_emitter.on('products', listener); var timeout = setTimeout(function() { products_emitter.emit('products', []); products_emitter.removeListener('products', listener); }, 10000); db.open(function() { // 打开名为products的表 db.collection("products", function(err, collection) { // select * from products 相当于db.products.find() collection.find(function(err, cursor) { cursor.toArray(function(err, items) { products_emitter.emit('products', items); }); }); }); }); }).listen(8000); console.log("Started");
2 楼
vb2005xu
2011-06-06
http://www.mongodb.org/pages/viewpage.action?pageId=5079170
中文手册
中文手册
1 楼
vb2005xu
2011-06-06
http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html
基本手册:
mongoDB 入门指南、示例
上一篇:简单介绍mongoDB
一、准备工作
1、 下载mongoDB
下载地址:http://www.mongodb.org/downloads
选择合适你的版本
相关文档:http://www.mongodb.org/display/DOCS/Tutorial
2、 安装mongoDB
A、 不解压模式:
将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默认端口27017,db保存的路径是系统C 硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在C盘下建立data/db目录。 mongoDB不会帮你建立这个目录的。
然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。
B、 解压模式
将下载下来的mongoDB-xxx.zip解压到任意目录,找到bin目录,运行mongod.exe就可以启动mongoDB,默认端口 27017,db保存的路径是当前zip所在硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在E盘下建立data/db目录。mongoDB不会帮你建立这个目录的。
然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。
3、 简单测试
> 2+4
6
> db
test
> //第一次插入数据会创建数据库
Fri May 20 16:47:39 malformed UTF-8 character sequence at offset 27
error2:(shellhelp1) exec failed: malformed UTF-8 character sequence at offset 27
> db.foo.insert({id: 2011, userName: 'hoojo', age: 24, email: "hoojo_@126.com"});
> db.foo.find();
{ "_id" : ObjectId("4dd62b0352a70cbe79e04f81"), "id" : 2011, "userName" : "hoojo",
"age" : 24, "email" : "hoojo_@126.com" }
>
上面完成了简单运算,显示当前使用的数据库,以及添加数据、查询数据操作
二、DB shell数据操作
shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。
Ø 数据库
1、Help查看命令提示
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
2、切换/创建数据库
>use yourDB;
当创建一个集合(table)的时候会自动创建当前数据库
3、查询所有数据库
show dbs;
4、删除当前使用数据库
db.dropDatabase();
5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”);
将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");
将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
db.repairDatabase();
8、查看当前使用的数据库
db.getName();
db;
db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
db.stats();
10、当前db版本
db.version();
11、查看当前db的链接机器地址
db.getMongo();
Ø Collection聚集集合
1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
2、得到指定名称的聚集集合(table)
db.getCollection("account");
3、得到当前db的所有聚集集合
db.getCollectionNames();
4、显示当前db所有聚集索引的状态
db.printCollectionStats();
Ø 用户相关
1、添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true);
添加用户、设置密码、是否只读
2、数据库认证、安全模式
db.auth("userName", "123123");
3、显示当前所有用户
show users;
4、删除用户
db.removeUser("userName");
Ø 其他
1、查询之前的错误信息
db.getPrevError();
2、清除错误记录
db.resetError();
三、Collection聚集集合操作
Ø 查看聚集集合基本信息
1、查看帮助
db.yourColl.help();
2、查询当前集合的数据条数
db.yourColl.count();
3、查看数据空间大小
db.userInfo.dataSize();
4、得到当前聚集集合所在的db
db.userInfo.getDB();
5、得到当前聚集的状态
db.userInfo.stats();
6、得到聚集集合总大小
db.userInfo.totalSize();
7、聚集集合储存空间大小
db.userInfo.storageSize();
8、Shard版本信息
db.userInfo.getShardVersion()
9、聚集集合重命名
db.userInfo.renameCollection("users");
将userInfo重命名为users
10、删除当前聚集集合
db.userInfo.drop();
Ø 聚集集合查询
1、查询所有记录
db.userInfo.find();
相当于:select * from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
3、查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age > 22;
5、查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age < 22;
6、查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
7、查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
8、查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
9、查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
10、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
11、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
12、查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age > 25;
13、按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
14、查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
15、查询前5条数据
db.userInfo.find().limit(5);
相当于:select top 5 * from userInfo;
16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
select top 10 * from userInfo
);
17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
18、or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
19、查询第一条数据
db.userInfo.findOne();
相当于:select top 1 * from userInfo;
db.userInfo.find().limit(1);
20、查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
21、按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
Ø 索引
1、创建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
3、查看总索引记录大小
db.userInfo.totalIndexSize();
4、读取当前集合的所有index信息
db.users.reIndex();
5、删除指定索引
db.users.dropIndex("name_1");
6、删除所有索引索引
db.users.dropIndexes();
Ø 修改、添加、删除集合数据
1、添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
2、修改
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName’ where age = 25;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
3、删除
db.users.remove({age: 132});
4、查询修改删除
db.users.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
db.runCommand({ findandmodify : "users",
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
update 或 remove 其中一个是必须的参数; 其他参数可选。
参数
详解
默认值
query
查询过滤条件
{}
sort
如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作
{}
remove
若为true,被选中对象将在返回前被删除
N/A
update
一个 修改器对象
N/A
new
若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。
false
fields
参见Retrieving a Subset of Fields (1.5.0+)
All fields
upsert
创建新对象若查询结果为空。 示例 (1.5.4+)
false
Ø 语句块操作
1、简单Hello World
print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
2、将一个对象转换成json
tojson(new Object());
tojson(new Object('a'));
3、循环添加数据
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
这样就循环添加了30条数据,同样也可以省略括号的写法
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
4、find 游标查询
>var cursor = db.users.find();
> while (cursor.hasNext()) {
printjson(cursor.next());
}
这样就查询所有的users信息,同样可以这样写
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
5、forEach迭代循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
6、将find游标当数组处理
var cursor = db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
7、将find游标转换成数组
> var arr = db.users.find().toArray();
> printjson(arr[2]);
用toArray方法将其转换为数组
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
9、forEach传递函数显示信息
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
上面介绍过forEach需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息
基本手册:
mongoDB 入门指南、示例
上一篇:简单介绍mongoDB
一、准备工作
1、 下载mongoDB
下载地址:http://www.mongodb.org/downloads
选择合适你的版本
相关文档:http://www.mongodb.org/display/DOCS/Tutorial
2、 安装mongoDB
A、 不解压模式:
将下载下来的mongoDB-xxx.zip打开,找到bin目录,运行mongod.exe就可以启动服务,默认端口27017,db保存的路径是系统C 硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在C盘下建立data/db目录。 mongoDB不会帮你建立这个目录的。
然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。
B、 解压模式
将下载下来的mongoDB-xxx.zip解压到任意目录,找到bin目录,运行mongod.exe就可以启动mongoDB,默认端口 27017,db保存的路径是当前zip所在硬盘目录的根目录的/data/db目录。也就是说,如果你的mongoDB-xxx.zip在E盘,那么你需要在E盘下建立data/db目录。mongoDB不会帮你建立这个目录的。
然后运行mongo即可连接到test数据库,你就可以进行数据操作。运行help显示帮助命令行。
3、 简单测试
> 2+4
6
> db
test
> //第一次插入数据会创建数据库
Fri May 20 16:47:39 malformed UTF-8 character sequence at offset 27
error2:(shellhelp1) exec failed: malformed UTF-8 character sequence at offset 27
> db.foo.insert({id: 2011, userName: 'hoojo', age: 24, email: "hoojo_@126.com"});
> db.foo.find();
{ "_id" : ObjectId("4dd62b0352a70cbe79e04f81"), "id" : 2011, "userName" : "hoojo",
"age" : 24, "email" : "hoojo_@126.com" }
>
上面完成了简单运算,显示当前使用的数据库,以及添加数据、查询数据操作
二、DB shell数据操作
shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。
Ø 数据库
1、Help查看命令提示
help
db.help();
db.yourColl.help();
db.youColl.find().help();
rs.help();
2、切换/创建数据库
>use yourDB;
当创建一个集合(table)的时候会自动创建当前数据库
3、查询所有数据库
show dbs;
4、删除当前使用数据库
db.dropDatabase();
5、从指定主机上克隆数据库
db.cloneDatabase(“127.0.0.1”);
将指定机器上的数据库的数据克隆到当前数据库
6、从指定的机器上复制指定数据库数据到某个数据库
db.copyDatabase("mydb", "temp", "127.0.0.1");
将本机的mydb的数据复制到temp数据库中
7、修复当前数据库
db.repairDatabase();
8、查看当前使用的数据库
db.getName();
db;
db和getName方法是一样的效果,都可以查询当前使用的数据库
9、显示当前db状态
db.stats();
10、当前db版本
db.version();
11、查看当前db的链接机器地址
db.getMongo();
Ø Collection聚集集合
1、创建一个聚集集合(table)
db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
2、得到指定名称的聚集集合(table)
db.getCollection("account");
3、得到当前db的所有聚集集合
db.getCollectionNames();
4、显示当前db所有聚集索引的状态
db.printCollectionStats();
Ø 用户相关
1、添加一个用户
db.addUser("name");
db.addUser("userName", "pwd123", true);
添加用户、设置密码、是否只读
2、数据库认证、安全模式
db.auth("userName", "123123");
3、显示当前所有用户
show users;
4、删除用户
db.removeUser("userName");
Ø 其他
1、查询之前的错误信息
db.getPrevError();
2、清除错误记录
db.resetError();
三、Collection聚集集合操作
Ø 查看聚集集合基本信息
1、查看帮助
db.yourColl.help();
2、查询当前集合的数据条数
db.yourColl.count();
3、查看数据空间大小
db.userInfo.dataSize();
4、得到当前聚集集合所在的db
db.userInfo.getDB();
5、得到当前聚集的状态
db.userInfo.stats();
6、得到聚集集合总大小
db.userInfo.totalSize();
7、聚集集合储存空间大小
db.userInfo.storageSize();
8、Shard版本信息
db.userInfo.getShardVersion()
9、聚集集合重命名
db.userInfo.renameCollection("users");
将userInfo重命名为users
10、删除当前聚集集合
db.userInfo.drop();
Ø 聚集集合查询
1、查询所有记录
db.userInfo.find();
相当于:select * from userInfo;
默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize = 50;这样每页就显示50条记录了。
2、查询去掉后的当前聚集集合中的某列的重复数据
db.userInfo.distinct("name");
会过滤掉name中的相同数据
相当于:select distict name from userInfo;
3、查询age = 22的记录
db.userInfo.find({"age": 22});
相当于: select * from userInfo where age = 22;
4、查询age > 22的记录
db.userInfo.find({age: {$gt: 22}});
相当于:select * from userInfo where age > 22;
5、查询age < 22的记录
db.userInfo.find({age: {$lt: 22}});
相当于:select * from userInfo where age < 22;
6、查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}});
相当于:select * from userInfo where age >= 25;
7、查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
8、查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
9、查询name中包含 mongo的数据
db.userInfo.find({name: /mongo/});
//相当于%%
select * from userInfo where name like ‘%mongo%’;
10、查询name中以mongo开头的
db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;
11、查询指定列name、age数据
db.userInfo.find({}, {name: 1, age: 1});
相当于:select name, age from userInfo;
当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
12、查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age > 25;
13、按照年龄排序
升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
14、查询name = zhangsan, age = 22的数据
db.userInfo.find({name: 'zhangsan', age: 22});
相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
15、查询前5条数据
db.userInfo.find().limit(5);
相当于:select top 5 * from userInfo;
16、查询10条以后的数据
db.userInfo.find().skip(10);
相当于:select * from userInfo where id not in (
select top 10 * from userInfo
);
17、查询在5-10之间的数据
db.userInfo.find().limit(10).skip(5);
可用于分页,limit是pageSize,skip是第几页*pageSize
18、or与 查询
db.userInfo.find({$or: [{age: 22}, {age: 25}]});
相当于:select * from userInfo where age = 22 or age = 25;
19、查询第一条数据
db.userInfo.findOne();
相当于:select top 1 * from userInfo;
db.userInfo.find().limit(1);
20、查询某个结果集的记录条数
db.userInfo.find({age: {$gte: 25}}).count();
相当于:select count(*) from userInfo where age >= 20;
21、按照某列进行排序
db.userInfo.find({sex: {$exists: true}}).count();
相当于:select count(sex) from userInfo;
Ø 索引
1、创建索引
db.userInfo.ensureIndex({name: 1});
db.userInfo.ensureIndex({name: 1, ts: -1});
2、查询当前聚集集合所有索引
db.userInfo.getIndexes();
3、查看总索引记录大小
db.userInfo.totalIndexSize();
4、读取当前集合的所有index信息
db.users.reIndex();
5、删除指定索引
db.users.dropIndex("name_1");
6、删除所有索引索引
db.users.dropIndexes();
Ø 修改、添加、删除集合数据
1、添加
db.users.save({name: ‘zhangsan’, age: 25, sex: true});
添加的数据的数据列,没有固定,根据添加的数据为准
2、修改
db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
相当于:update users set name = ‘changeName’ where age = 25;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
相当于:update users set age = age + 50 where name = ‘Lisi’;
db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
3、删除
db.users.remove({age: 132});
4、查询修改删除
db.users.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
db.runCommand({ findandmodify : "users",
query: {age: {$gte: 25}},
sort: {age: -1},
update: {$set: {name: 'a2'}, $inc: {age: 2}},
remove: true
});
update 或 remove 其中一个是必须的参数; 其他参数可选。
参数
详解
默认值
query
查询过滤条件
{}
sort
如果多个文档符合查询过滤条件,将以该参数指定的排列方式选择出排在首位的对象,该对象将被操作
{}
remove
若为true,被选中对象将在返回前被删除
N/A
update
一个 修改器对象
N/A
new
若为true,将返回修改后的对象而不是原始对象。在删除操作中,该参数被忽略。
false
fields
参见Retrieving a Subset of Fields (1.5.0+)
All fields
upsert
创建新对象若查询结果为空。 示例 (1.5.4+)
false
Ø 语句块操作
1、简单Hello World
print("Hello World!");
这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
2、将一个对象转换成json
tojson(new Object());
tojson(new Object('a'));
3、循环添加数据
> for (var i = 0; i < 30; i++) {
... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
... };
这样就循环添加了30条数据,同样也可以省略括号的写法
> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
4、find 游标查询
>var cursor = db.users.find();
> while (cursor.hasNext()) {
printjson(cursor.next());
}
这样就查询所有的users信息,同样可以这样写
var cursor = db.users.find();
while (cursor.hasNext()) { printjson(cursor.next); }
同样可以省略{}号
5、forEach迭代循环
db.users.find().forEach(printjson);
forEach中必须传递一个函数来处理每条迭代的数据信息
6、将find游标当数组处理
var cursor = db.users.find();
cursor[4];
取得下标索引为4的那条数据
既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
那样我们也可以用循环显示数据
for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
7、将find游标转换成数组
> var arr = db.users.find().toArray();
> printjson(arr[2]);
用toArray方法将其转换为数组
8、定制我们自己的查询结果
只显示age <= 28的并且只显示age这列数据
db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
排除age的列
db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
9、forEach传递函数显示信息
db.things.find({x:4}).forEach(function(x) {print(tojson(x));});
上面介绍过forEach需要传递一个函数,函数会接受一个参数,就是当前循环的对象,然后在函数体重处理传入的参数信息
发表评论
-
解决: g++: internal compiler error: Killed (program cc1plus)
2014-12-30 18:47 46017g++: internal compiler error: ... -
linux上靠谱免费的markdown编辑器haroopad
2014-10-18 16:58 2393linux 下我没有找到一个比较好用的 markdown ... -
sublime text linux上中文输入问题的终极解决方案
2014-10-13 11:07 8562我一直在使用sublime text ... -
startos 上 安装百度云客户端
2014-09-22 17:03 3115我的本地gcc版本是 写 ... -
解决ssl校验问题手札
2014-09-16 13:57 2659不论是在使用brew 还是使用 git 总会遇到 ssl ... -
mac系统使用指南之色色篇
2014-08-02 16:38 9037之前没怎么用过mac系统,公司给陪了一个air本,感觉性能 ... -
最近要强迫自己了解的东西
2014-07-01 12:39 1131http://aralejs.org/docs/about ... -
Laravel 4 启用firephp 支持
2014-06-27 15:53 2512目前项目中选用的开发框架是Laravel4,经过几天的阅读源 ... -
PHP cli模式下提示 Module 'xxx' already loaded
2014-04-14 15:23 1731今天在终端下执行PHP脚本爆出 Module 'sqlite ... -
让普通用户登录phpmyadmin不显示information_schema
2014-02-13 16:54 1909http://www.cnblogs.com/faily20 ... -
linux 汉化记述
2014-02-11 16:12 1334linux 汉化记述[机制]一般汉化都是从如下方面着手: ... -
B版树莓派使用学习手札
2014-02-11 11:34 12089配置: 写道 树莓派个 ... -
推荐个免费的python ide
2014-01-03 16:56 4431这是我见过的windows上免费的,最好 最小巧的pytho ... -
vim 学习纪要 -- 自己动手搭建IDE
2013-12-24 18:38 4063从无到有学习vim开发 ... -
PHP插件 vld 学习
2013-11-21 18:17 1230今天凡凡 给出了一段代码: <?php $a=1 ... -
推荐linux 邮件客户端Claws Mail
2013-10-18 16:56 13078默认的startos没有安装邮件客户端,从软件中心中有2个 ... -
推荐linux apache日志分析程序 goaccess
2013-10-18 12:17 5998之前windows上有一个apache访问日志分析的工具, ... -
推荐linux ssh管理工具 remmina远程桌面 -- 替代 secureCRT
2013-10-17 09:58 11596在startos 系统中安装完ssh包之后,只能使用命令行来 ... -
推荐linux svn管理工具 rapidSVN
2013-10-16 12:08 10238之前使用rabbitVCS 但是依然不很给力,装完 sta ... -
将StartOS5.1打造成PHP开发者环境 LAMP
2013-10-15 15:25 5003昨天中午的时候下载了5.1版,在win7中使用sbin撞倒 ...
相关推荐
关于海图引擎的开发指南,支持C++ \C#
电子海图,作为航海领域的重要工具,是现代船舶航行安全的重要保障。电子海图系统(Electronic Navigational Chart,简称ENC)是国际海事组织(IMO)推荐的标准海图形式,它结合了数字地图和GPS定位技术,为航海者...
海图是航海中不可或缺的工具,它提供了关于海洋水域和沿岸地形的详细信息,以确保航行的安全性。海图一般分为普通海图和专用海图两大类。专用海图特指电子海图,即电子航海图(ENC),是一种专为电子海图显示与信息...
在本例中,所提及的电子海图浏览器是用Qt库开发的,Qt是一个流行的开源C++框架,它支持多平台开发,意味着该浏览器可以在Windows、Linux、macOS等多种操作系统上运行。 电子海图是航海领域的重要组成部分,它们以...
电子海图技术是现代航海领域中的重要组成部分,它利用数字地图数据来呈现海洋地理信息,大大提升了航行的安全性和效率。本文将围绕“电子海图”、“电子海图浏览器”以及“电子海图二次开发”这三个核心概念进行深入...
电子海图技术是现代航海领域中的重要组成部分,它利用数字化地图数据来呈现海洋地理信息,大大提升了航行的安全性和效率。本文将围绕“电子海图浏览器”、“电子海图二次开发”以及“电子海图源码分享”这三大主题...
在本资料中,我们将深入探讨电子海图的下载方法以及如何提取和处理水深数据。 首先,下载电子海图通常需要通过官方认可的海图更新服务提供商,如国际海道测量组织(IHO)认证的供应商。这些供应商会提供符合S-57...
在本压缩包"S57int1_xref.zip"中,包含了与S57标准相关的电子海图开发和使用的文档资料,这对于理解ECDIS系统及其数据交换格式至关重要。 S57是国际海事组织(IMO)制定的一种国际标准,全称为“International ...
《S57海图打包上传:深度解析与应用》 S57海图,作为国际水道测量组织(International Hydrographic Organization, IHO)制定的一种标准格式,是电子海图数据(Electronic Navigational Chart, ENC)的核心组成部分...
TjuES57MapViewer是将天津大学电子海图控件TjuES57Map作为电子海图引擎开发的电子海图显示系统。 天津大学电子海图控件TjuES57Map为AIMIP实验室独立自主开发,具有独立知识产权的S-57海图引擎,适用于Windows系列...
《深入理解S57标准电子海图:.000文件解析与应用》 S57标准电子海图,作为国际水道测量组织(International Hydrographic Organization, IHO)制定的一种数据交换格式,是现代航海领域的重要工具。.000文件作为S57...
电子海图(Electronic Navigational Chart,ENC)是现代航海领域的重要工具,它结合了数字化、信息化技术,为船舶航行提供了精确、实时的海图信息。电子海图浏览器则是显示和操作这些电子海图的软件系统,使得船员...
本压缩包文件"电子海图.rar"包含四张以".000"格式存储的电子海图。这种格式通常是专门的海图软件或应用程序所使用的,例如在描述中提到的"YimaEncViewer",它是一个能够查看和处理此类海图的软件。 首先,我们需要...
- **真运动显示 (True Motion Display)**:以海图为固定参照物,显示本船位置和其他活动目标在地球表面的实际运动情况。 - **相对运动显示 (Relative Motion Display)**:以本船位置为参照物,显示海图和其他活动...
免费版的安卓电子海图,可以动态的显示船舶,非常棒的软件,另外如果电脑方便上网开一登陆www.marinetraffic.com网页版的电子海图,看着更爽……
.000格式的海图,可在电子海图查看或浏览器中导入。适用于电子海图开发。
"蚂蚁海图平台"是蚂蚁技术团队开发的一款跨平台电子海图系统,旨在提供高效、准确的航海导航服务。该平台具有对国际标准S57和SHP格式海图数据的强大解析与显示功能,同时支持AIS(Automatic Identification System)...
《支持S57的电子海图软件:深入解析与应用》 在航海领域,电子海图(Electronic Navigational Chart,ENC)已经成为现代导航的重要工具,而S57标准则是国际上广泛采用的电子海图数据交换格式。本文将详细探讨一款...
电子海图显示与信息系统(ECDIS)是随当代电子计算机技术的飞速发展而发 展起来的,是继雷达/ARPA.?_后在船舶导航方面又一项伟大的技术革命,已发展成 为一种新型的船舶导航系统和辅助决策系统。它不仅能连续给出...
本资源包含120张基于S57标准的电子海图,但这些海图已经被转换为.shp(Shapefile)格式。Shapefile是一种常见的地理信息系统(GIS)数据格式,由Esri公司开发,广泛用于存储地理空间矢量数据,如点、线、多边形等...