CSS区分各浏览器Hack (2011-12-06)

虽然我不提倡用Css Hack,
但是有时候不得不用Css Hack处理一些比较头疼的样式
以下是区分IE6,IE7,IE8,IE9,Firefox,Chrome,Opera,Safari的Hack写法
也是目前最全的CssHack

#test   
{   
	width:300px;   
	height:300px;   
	  
	background-color:blue;      /*firefox*/
	background-color:red\9;      /*all ie*/
	background-color:yellow\0;    /*ie8*/
	+background-color:pink;        /*ie7*/
	_background-color:orange;       /*ie6*/
}  
:root #test { background-color:purple\9; }  /*ie9*/
@media all and (min-width:0px){ #test {background-color:black\0;} }  /*opera*/
@media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }  /*chrome and safari*/

background-color:blue; 各个浏览器都认识,这里给firefox用;

background-color:red\9;\9所有的ie浏览器可识别;

background-color:yellow\0; \0 是留给ie8的,但笔者测试,发现最新版opera也认识,汗。。。不过且慢,后面自有hack写了给opera认的,所以,\0我们就认为是给ie8留的;

+background-color:pink; + ie7定了;

_background-color:orange; _专门留给神奇的ie6;

:root #test { background-color:purple\9; } :root是给ie9的,网上流传了个版本是 :root #test { background-color:purple\0;},呃。。。这个。。。,新版opera也认识,所以经笔者反复验证最终ie9特有的为:root 选择符 {属性\9;}

@media all and (min-width:0px){ #test {background-color:black\0;} } 这个是老是跟ie抢着认\0的神奇的opera,必须加个\0,不然firefox,chrome,safari也都认识。。。

@media screen and (-webkit-min-device-pixel-ratio:0){ #test {background-color:gray;} }最后这个是浏览器新贵chrome和safari的。

 

好了就这么多了,特别注意以上顺序是不可以改变的。css hack虽然可以解决个浏览器之间css显示的差异问题,但是毕竟不符合W3C规范,我们平时写css最好是按照标准来,这样对我们以后维护也是大有好处的,实在不行再用。

点击查看原文阅读(126) | 评论(0) | 分类:前端开发HTML5/JS

Node+Mongoose常用查询中文文档 (2011-12-04)

 Mongoose 模型提供了 find, findOne, 和 findById 方法用于文档查询。

Model.find

Model.find(query, fields, options, callback)
// fields 和 options 都是可选参数

简单查询

Model.find({ 'csser.com': 5 }, function (err, docs) { // docs 是查询的结果数组 });

只查询指定键的结果

Model.find({}, ['first', 'last'], function (err, docs) {
  // docs 此时只包含文档的部分键值
})

Model.findOne

与 Model.find 相同,但只返回单个文档

Model.findOne({ age: 5}, function (err, doc){
  // doc 是单个文档
});

Model.findById

与 findOne 相同,但它接收文档的 _id 作为参数,返回单个文档。_id 可以是字符串或 ObjectId 对象。

Model.findById(obj._id, function (err, doc){
  // doc 是单个文档
});

Model.count

返回符合条件的文档数。

Model.count(conditions, callback);

Model.remove

删除符合条件的文档。

Model.remove(conditions, callback);

Model.distinct

查询符合条件的文档并返回根据键分组的结果。

Model.distinct(field, conditions, callback);

Model.where

当查询比较复杂时,用 where:

Model
.where('age').gte(25)
.where('tags').in(['movie', 'music', 'art'])
.select('name', 'age', 'tags')
.skip(20)
.limit(10)
.asc('age')
.slaveOk()
.hint({ age: 1, name: 1 })
.run(callback);

Model.$where

有时我们需要在 mongodb 中使用 javascript 表达式进行查询,这时可以用 find({$where : javascript}) 方式,$where 是一种快捷方式,并支持链式调用查询。

Model.$where('this.firstname === this.lastname').exec(callback)

Model.update

使用 update 子句更新符合指定条件的文档,更新数据在发送到数据库服务器之前会改变模型的类型。

var conditions = { name: 'borne' }
  , update = { $inc: { visits: 1 }}
  , options = { multi: true };

Model.update(conditions, update, options, callback)

注意:为了向后兼容,所有顶级更新键如果不是原子操作命名的,会统一被按 $set 操作处理,例如:

var query = { name: 'borne' };
Model.update(query, { name: 'jason borne' }, options, callback)

// 会被这样发送到数据库服务器

Model.update(query, { $set: { name: 'jason borne' }}, options, callback)

查询 API

如果不提供回调函数,所有这些方法都返回 Query 对象,它们都可以被再次修改(比如增加选项、键等),直到调用 exec 方法。

var query = Model.find({});

query.where('field', 5);
query.limit(5);
query.skip(100);

query.exec(function (err, docs) {
  // called when the `query.complete` or `query.error` are called
  // internally
});

[完]

点击查看原文阅读(150) | 评论(0) | 分类:NoSQL

MongoDB高级查询 (2011-12-02)

详情可以参考官方文档:
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%7B%7Blimit%28%29%7D%7D

 Mongodb一些常用的查询

WHERE查询

// i.e., select * from things where x=3 and y="foo"
db.things.find( { x : 3, y : "foo" } );

 

j不等于3,k大于10

db.things.find({j: {$ne: 3}, k: {$gt: 10} });

 

存储数组元素

db.things.insert({colors : ["blue", "black"]})
db.things.insert({colors : ["yellow", "orange", "red"]})
//查询结果
db.things.find({colors : {$ne : "red"}})
{"_id": ObjectId("4dc9acea045bbf04348f9691"), "colors": ["blue","black"]}

 

对比操作符

db.collection.find({ "field" : { $gt: value } } );   // greater than  : field > value
db.collection.find({ "field" : { $lt: value } } );   // less than  :  field < value
db.collection.find({ "field" : { $gte: value } } );  // greater than or equal to : field >= value
db.collection.find({ "field" : { $lte: value } } );  // less than or equal to : field <= 

 

$all 全部属于

db.things.find( { a: { $all: [ 2, 3 ] } } )

 

$exists 字段存在

db.things.find( { a : { $exists : true } } )
db.things.find( { a : { $exists : false } } )
true返回存在字段a的数据,false返回不存在字度a的数据。

 

$mod 取模运算

db.things.find( { a : { $mod : [ 10 , 1 ] } } )
条件相当于a % 10 == 1 即a除以10余数为1的。

 

$ne 不等于

db.things.find( { x : { $ne : 3 } } )
条件相当于x<>3,即x不等于3。

 

$in 属于

db.things.find({j:{$in: [2,4,6]}})
条件相当于j等于[2,4,6]中的任何一个。

 

$nin 不属于

db.things.find({j:{$nin: [2,4,6]}})
条件相当于 j 不等于 [2,4,6] 中的任何一个。

 

$or 或 (注意:MongoDB 1.5.3后版本可用)

db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )
符合条件a=1的或者符合条件b=2的数据都会查询出来。

 

$size 数量,尺寸

db.things.find( { a : { $size: 1 } } )
条件相当于a的值的数量是1(a必须是数组,一个值的情况不能算是数量为1的数组)。

 

$type 字段类型

db.things.find( { a : { $type : 2 } } )
条件是a类型符合的话返回数据。

 

limit() skip()

这两个ME想连起来讲,他们就是你实现数据库分页的好帮手。
limit()控制返回结果数量,如果参数是0,则当作没有约束,limit()将不起作用。
skip()控制返回结果跳过多少数量,如果参数是0,则当作没有约束,skip()将不起作用,或者说跳过了0条。
例如:
 db.test.find().skip(5).limit(5)
结果就是取第6条到第10条数据。
snapshot()   (没有尝试)
count()   条数
返回结果集的条数。
db.test.count()
在加入skip()和limit()这两个操作时,要获得实际返回的结果数,需要一个参数true,否则返回的是符合查询条件的结果总数。
例子如下:
> db.test.find().skip(5).limit(5).count()
9
> db.test.find().skip(5).limit(5).count(true)
4

11) $elemMatch

如果对象有一个元素是数组,那么$elemMatch可以匹配内数组内的元素:
 t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } ) 
{ "_id" : ObjectId("4b5783300334000000000aa9"), 
"x" : [ { "a" : 1, "b" : 3 }, 7, { "b" : 99 }, { "a" : 11 } ]
}
$elemMatch : { a : 1, b : { $gt : 1 } } 所有的条件都要匹配上才行。
注意,上面的语句和下面是不一样的。
 t.find( { "x.a" : 1, "x.b" : { $gt : 1 } } )
$elemMatch是匹配{ "a" : 1, "b" : 3 },而后面一句是匹配{ "b" : 99 }, { "a" : 11 } 

12) 查询嵌入对象的值

db.postings.find( { "author.name" : "joe" } );
注意用法是author.name,用一个点就行了。更详细的可以看这个链接: dot notation
举个例子:
 db.blog.save({ title : "My First Post", author: {name : "Jane", id : 1}})
如果我们要查询 authors name 是Jane的, 我们可以这样:
 db.blog.findOne({"author.name" : "Jane"})
如果不用点,那就需要用下面这句才能匹配:
db.blog.findOne({"author" : {"name" : "Jane", "id" : 1}})
下面这句:
db.blog.findOne({"author" : {"name" : "Jane"}})
是不能匹配的,因为mongodb对于子对象,他是精确匹配。

点击查看原文阅读(127) | 评论(0) | 分类:NoSQL

参加2011大数据技术大会 (2011-11-26)

参加2011大数据技术大会


有幸免费参加了2011年大数据技术大会
目睹一下各路大牛。

大数据量优化一直是我的瓶颈,
最近NoSQL的概念很火,嘉宾说超过了云计算的感念
的确是,NOSQL已经扑面而来了,

今天的感受,这些演讲嘉宾讲了很多概念性的东西
这些东西我认为在网上都能查得到
我最想要的是一些经验性的分享,如何遇到问题,如何解决的
想了解从关系型数据库转换成Nosql数据库有什么利弊。等....

今天的大会让我有点失望,不知道他们是不是不愿意把核心的东西分享出来
演讲时还掺杂N多英文,这样是很酷吗?  后面的哥们都睡着了

这些大数据量的东西我迟早会接触到的,自己实践出真知吧

很喜欢一句话“技术不分高低,只分了解先后”!

点击查看原文阅读(210) | 评论(0) | 分类:我的日记

MongoDB数据库导入与导出 (2011-11-21)

 MongoDB的备份(mongodump)与恢复(mongorestore)

一、备份

先介绍下命令语法:

mongodump -h dbhost -d dbname -o dbdirectory

-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:需要备份的数据库实例,例如:test

-o:备份的数据存放位置,例如:/data0/backup,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

 

二、恢复

mongorestore -h dbhost -d dbname –directoryperdb dbdirectory

例如:/usr/wangzhen/mongodb-linux-x86_64-2.0.1/bin/mongorestore --directoryperdb /usr/wangzhen/xikang

-h:MongoDB所在服务器地址

-d:需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

–directoryperdb:备份数据所在位置,例如:/data0/backup/test,这里为什么要多加一个test,而不是备份时候的backup,读者自己查看提示吧!

–drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

点击查看原文阅读(255) | 评论(0) | 分类:NoSQL
<< 1 2 3 4 5 6 7 8 9 10 >>