??xml version="1.0" encoding="utf-8" standalone="yes"?>五月激情在线,日韩av一区二区三区四区,亚洲精品高清视频http://www.aygfsteel.com/ashutc/category/47416.html沈阳求职Qjava3q以上经验)Qashutc@126.comzh-cnWed, 20 Apr 2011 11:15:46 GMTWed, 20 Apr 2011 11:15:46 GMT60mongodb 嵌套查询 for javahttp://www.aygfsteel.com/ashutc/archive/2011/02/18/344602.html西瓜西瓜Fri, 18 Feb 2011 03:07:00 GMThttp://www.aygfsteel.com/ashutc/archive/2011/02/18/344602.htmlhttp://www.aygfsteel.com/ashutc/comments/344602.htmlhttp://www.aygfsteel.com/ashutc/archive/2011/02/18/344602.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/344602.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/344602.html    DBCollection col = db.getCollection(name);
        DBObject query 
= new BasicDBObject("$in"new Object[] { ids });
        DBCursor ite 
= col.find(query);

西瓜 2011-02-18 11:07 发表评论
]]>
从MySQL到MongoDB易对照表http://www.aygfsteel.com/ashutc/archive/2011/02/18/344600.html西瓜西瓜Fri, 18 Feb 2011 02:28:00 GMThttp://www.aygfsteel.com/ashutc/archive/2011/02/18/344600.htmlhttp://www.aygfsteel.com/ashutc/comments/344600.htmlhttp://www.aygfsteel.com/ashutc/archive/2011/02/18/344600.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/344600.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/344600.html查询Q?br /> MySQL:
SELECT 
* FROM user
Mongo:
db.user.find()

MySQL:
SELECT 
* FROM user WHERE name = ’starlee’
Mongo:
db.user.find({‘name’ : ’starlee’})

插入Q?br /> MySQL:
INSERT INOT user (`name`, `age`) values (’starlee’,
25)
Mongo:
db.user.insert({‘name’ : ’starlee’, ‘age’ : 
25})

如果你想在MySQL里添加一个字D,你必:
ALTER TABLE user….
但在MongoDB里你只需要:
db.user.insert({‘name’ : ’starlee’, ‘age’ : 
25, ‘email’ : ’starlee@starlee.com’})

删除Q?br /> MySQL:
DELETE 
* FROM user
Mongo:
db.user.remove({})

MySQL:
DELETE FROM user WHERE age 
< 30
Mongo:
db.user.remove({‘age’ : {$lt : 
30}})

$gt : 
> ; $gte : >= ; $lt : < ; $lte : <= ; $ne : !=

更新:

MySQL:
UPDATE user SET `age` 
= 36 WHERE `name` = ’starlee’
Mongo:
db.user.update({‘name’ : ’starlee’}, {$set : {‘age’ : 
36}})

MySQL:
UPDATE user SET `age` 
= `age` + 3 WHERE `name` = ’starlee’
Mongo:
db.user.update({‘name’ : ’starlee’}, {$inc : {‘age’ : 
3}})

MySQL:
SELECT COUNT(
*) FROM user WHERE `name` = ’starlee’
Mongo:
db.user.find({‘name’ : ’starlee’}).count()

MySQL:
SELECT 
* FROM user limit 10,20
Mongo:
db.user.find().skip(
10).limit(20)

MySQL:
SELECT 
* FROM user WHERE `age` IN (2535,45)
Mongo:
db.user.find({‘age’ : {$in : [
253545]}})

MySQL:
SELECT 
* FROM user ORDER BY age DESC
Mongo:
db.user.find().sort({‘age’ : 
-1})

MySQL:
SELECT DISTINCT(name) FROM user WHERE age 
> 20
Mongo:
db.user.distinct(‘name’, {‘age’: {$lt : 
20}})

MySQL:
SELECT name, sum(marks) FROM user GROUP BY name
Mongo:
db.user.group({
key : {‘name’ : 
true},
cond: {‘name’ : ‘foo’},
reduce: function(obj,prev) { prev.msum 
+= obj.marks; },
initial: {msum : 
0}
});

MySQL:
SELECT name FROM user WHERE age 
< 20
Mongo:
db.user.find(‘
this.age < 20′, {name : 1})

发现很多人在搜MongoDB循环插入数据Q下面把MongoDB循环插入数据的方法添加在下面Q?br />
for(var i=0;i<100;i++)db.test.insert({uid:i,uname:’nosqlfan’+i});

上面一ơ性插入一百条数据Q大概结构如下:
{ “_id” : ObjectId(“4c876e519e86023a30dde6b8″), “uid” : 
55, “uname” : “nosqlfan55″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6b9″), “uid” : 
56, “uname” : “nosqlfan56″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6ba”), “uid” : 
57, “uname” : “nosqlfan57″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6bb”), “uid” : 
58, “uname” : “nosqlfan58″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6bc”), “uid” : 
59, “uname” : “nosqlfan59″ }
{ “_id” : ObjectId(“4c876e519e86023a30dde6bd”), “uid” : 
60, “uname” : “nosqlfan60″ } 易对照表
SQL Statement                                                        Mongo Query Language Statement 
CREATE TABLE USERS (a Number, b Number)                          implicit; can be done explicitly 

INSERT INTO USERS VALUES(
1,1)                                    db.users.insert({a:1,b:1})
SELECT a,b FROM users    
                                       db.users.find({}, {a:1,b:1})
SELECT 
* FROM users                                              db.users.find()
SELECT 
* FROM users WHERE age=33                                   db.users.find({age:33})
SELECT a,b FROM users WHERE age
=33                                   db.users.find({age:33}, {a:1,b:1})
SELECT 
* FROM users WHERE age=33 ORDER BY name                          db.users.find({age:33}).sort({name:1})
SELECT 
* FROM users WHERE age>33                                   db.users.find({'age':{$gt:33}})})
SELECT 
* FROM users WHERE age<33                                   db.users.find({'age':{$lt:33}})})
SELECT 
* FROM users WHERE name LIKE "%Joe%"                                   db.users.find({name:/Joe/})
SELECT 
* FROM users WHERE name LIKE "Joe%"                                   db.users.find({name:/^Joe/})
SELECT 
* FROM users WHERE age>33 AND age<=40                                   db.users.find({'age':{$gt:33,$lte:40}})})
SELECT 
* FROM users ORDER BY name DESC                                   db.users.find().sort({name:-1})
CREATE INDEX myindexname ON users(name)  
                                 db.users.ensureIndex({name:1})
CREATE INDEX myindexname ON users(name,ts DESC)  
                                 db.users.ensureIndex({name:1,ts:-1})
SELECT 
* FROM users WHERE a=1 and b='q'                                   db.users.find({a:1,b:'q'})
SELECT 
* FROM users LIMIT 10 SKIP 20                                   db.users.find().limit(10).skip(20)
SELECT 
* FROM users WHERE a=1 or b=2                                   db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } )
SELECT 
* FROM users LIMIT 1                                          db.users.findOne()
EXPLAIN SELECT 
* FROM users WHERE z=3                                   db.users.find({z:3}).explain()
SELECT DISTINCT last_name FROM users   
                                db.users.distinct('last_name')
SELECT COUNT(
*y) FROM users                                            db.users.count()
SELECT COUNT(
*y) FROM users where AGE > 30                             db.users.find({age: {'$gt'30}}).count()
SELECT COUNT(AGE) from users   
                                    db.users.find({age: {'$exists'true}}).count()
UPDATE users SET a
=1 WHERE b='q'                                   db.users.update({b:'q'}, {$set:{a:1}}, falsetrue)
UPDATE users SET a
=a+2 WHERE b='q'                                   db.users.update({b:'q'}, {$inc:{a:2}}, falsetrue)
DELETE FROM users WHERE z
="abc"                                    db.users.remove({z:'abc'});













西瓜 2011-02-18 10:28 发表评论
]]>
MongoDB+java+spirng+morphiahttp://www.aygfsteel.com/ashutc/archive/2011/01/12/342819.html西瓜西瓜Wed, 12 Jan 2011 02:09:00 GMThttp://www.aygfsteel.com/ashutc/archive/2011/01/12/342819.htmlhttp://www.aygfsteel.com/ashutc/comments/342819.htmlhttp://www.aygfsteel.com/ashutc/archive/2011/01/12/342819.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/342819.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/342819.htmlHotle.java


package test_yu.morphiaSpring;

import com.google.code.morphia.annotations.Embedded;
import com.google.code.morphia.annotations.Entity;
import com.google.code.morphia.annotations.Id;
/**
 * 
 * 
@author yu
 * 创徏了两个领域Hotel,Address,前者ؓ实体存在,有自q生命周期,后者则为内嵌在实体之中,没有独立的生命周?br />  
*/
@Entity
public class Hotle {
    @Id
    
private int id;

    
private String name;
    
private int stars;
    @Embedded
    
private Address address;
    
public int getId() {
        
return id;
    }
    
public void setId(int id) {
        
this.id = id;
    }
    
public String getName() {
        
return name;
    }
    
public void setName(String name) {
        
this.name = name;
    }
    
public int getStars() {
        
return stars;
    }
    
public void setStars(int stars) {
        
this.stars = stars;
    }
    
public Address getAddress() {
        
return address;
    }
    
public void setAddress(Address address) {
        
this.address = address;
    }
    
}

@Embedded
class Address {
    
private String street;
    
private String city;
    
private String postCode;
    
private String country;
    
public String getStreet() {
        
return street;
    }
    
public void setStreet(String street) {
        
this.street = street;
    }
    
public String getCity() {
        
return city;
    }
    
public void setCity(String city) {
        
this.city = city;
    }
    
public String getPostCode() {
        
return postCode;
    }
    
public void setPostCode(String postCode) {
        
this.postCode = postCode;
    }
    
public String getCountry() {
        
return country;
    }
    
public void setCountry(String country) {
        
this.country = country;
    }

    
    
}

MorphiaBean.java

package test_yu.morphiaSpring;

import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.mongodb.Mongo;

public class MorphiaBean extends Morphia {
    
private Mongo mongo;
    
private String dbName;
    
public Datastore getDatastore(){
        
if(this.mongo==null||this.dbName==null){
            
return null;
        }
      
return createDatastore(mongo, dbName);
    }
    
public Mongo getMongo() {
        
return mongo;
    }
    
public void setMongo(Mongo mongo) {
        
this.mongo = mongo;
    }
    
public String getDbName() {
        
return dbName;
    }
    
public void setDbName(String dbName) {
        
this.dbName = dbName;
    }

}

MorphiaTest.java

package test_yu.morphiaSpring;


import java.net.UnknownHostException;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.google.code.morphia.Datastore;

public class MorphiaTest {
    
public static void main(String[] args) throws UnknownHostException {
        ApplicationContext context 
=new ClassPathXmlApplicationContext("applicationContext.xml");
        MorphiaBean morphiaBean
=(MorphiaBean) context.getBean("morphia");
        Datastore ds
=morphiaBean.getDatastore();
        
//向数据库中添加多条记?/span>
        addManyArticles(ds);
//        printLine();
//
//        Article single = ds.get(Article.class,9);
//        System.out.println("single = " + single);
//
//        printLine();
//
//        //查询文章大于5Q编辑id大于106的文?br /> //        List<Article> articles= ds.find(Article.class,"id >",5).filter("editor.id >",106).asList();
//        displayArticleList(articles);
//
//        printLine();
//
//        //更新id=123的文章标题和~辑名称
//        ds.update(ds.createQuery(Article.class).where("id = 123"),ds.createUpdateOperations(Article.class).set("title","修改后的标题").set("editor.name","yumeng"));
//
//        printLine();
//
//        //所有id号大?的文章的~辑id?1
//        ds.update(ds.createQuery(Article.class).where("id > 5"),ds.createUpdateOperations(Article.class).inc("editor.id"));
//
//        printLine();
//
//        //向id?23的文章的关键词列表中新增一个关键词
//        ds.update(ds.createQuery(Article.class).filter("id",123),ds.createUpdateOperations(Article.class).add("keywords", "宏基"));
//        //扚wd关键?br /> //        List<String > keys = new ArrayList<String>();
//        keys.add("苍天");
//        keys.add("大地");
//        ds.update(ds.createQuery(Article.class).filter("id",123),ds.createUpdateOperations(Article.class).addAll("keywords",keys,false));
//        //列出所有数?br /> //        Query<Article> query = ds.find(Article.class);
//        displayQueryRusult(query);

    }

//    private static void printLine() {
//        System.out.println("-------------------------------------");
//    }
//
//    private static void displayArticleList(List<Article> articles) {
//        for (Article article : articles) {
//            System.out.println("article = " + article);
//        }
//    }
//
//    private static void displayQueryRusult(Query<Article> query) {
//        Iterator<Article> it = query.fetch().iterator();
//        while (it.hasNext()) {
//            Article article =  it.next();
//            System.out.println("article.toString() = " + article.toString());
//        }
//    }

    
private static void addManyArticles(Datastore ds) {
        
for(int i = 0;i < 10;i++){
            Hotle hotle 
= new Hotle();

            Address address
=new Address();
            address.setCity(
"北京");
            address.setCountry(
"中国");
            address.setPostCode(
"100080");
            address.setStreet(
"h中街");
            
            
            hotle.setId(i);
            hotle.setName(
"悦来酒店");
            hotle.setStars(
0);
            hotle.setAddress(address);
            ds.save(hotle);
        }
    }
}


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
    
<bean id="propertyConfigurer"
        
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        
<property name="locations">
            
<list>
                
<value>/config.properties</value>
            
</list>
        
</property>
    
</bean>
    
<bean id="mongo" class="com.mongodb.Mongo">
        
<constructor-arg type="String" value="219.239.88.200"></constructor-arg>
        
<constructor-arg type="int" value="27017"></constructor-arg>
    
</bean>
    
<bean id="morphia" class="test_yu.morphiaSpring.MorphiaBean">
        
<property name="mongo" ref="mongo"></property>
        
<property name="dbName" value="address"></property>
    
</bean>
</beans>


需要几个支持包
























西瓜 2011-01-12 10:09 发表评论
]]>
MongoDB 正则表达?regex 查询http://www.aygfsteel.com/ashutc/archive/2010/12/21/341264.html西瓜西瓜Tue, 21 Dec 2010 09:48:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/12/21/341264.htmlhttp://www.aygfsteel.com/ashutc/comments/341264.htmlhttp://www.aygfsteel.com/ashutc/archive/2010/12/21/341264.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/341264.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/341264.html
                //条g查询  模糊查询
                Pattern john = Pattern.compile("586190",Pattern.CASE_INSENSITIVE);
                BasicDBObject query 
= new BasicDBObject("url", john); // finds all people with "name" matching /joh?n/i DBCursor cursor = collection.find(query);
                DBCursor ite = col.find(query);





西瓜 2010-12-21 17:48 发表评论
]]>
mongodb查询的语?/title><link>http://www.aygfsteel.com/ashutc/archive/2010/12/21/341263.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Tue, 21 Dec 2010 09:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2010/12/21/341263.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/341263.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2010/12/21/341263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/341263.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/341263.html</trackback:ping><description><![CDATA[<br /> <br /> <a target="_blank" >http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ConditionalOperators%3A%3C%2C%3C%3D%2C%3E%2C%3E%3D</a><br /> <br /> 1 ) . 大于Q小于,大于或等于,于或等?br /> <br /> $gt:大于<br /> $lt:于<br /> $gte:大于或等?br /> $lte:于或等?br /> <br /> 例子Q?br /> <br /> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.collection.find({ <span id="wmqeeuq" class="code-quote">"field"</span> : { $gt: value } } ); <span id="wmqeeuq" class="code-comment">// greater than : field > value<br /> </span>db.collection.find({ <span id="wmqeeuq" class="code-quote">"field"</span> : { $lt: value } } ); <span id="wmqeeuq" class="code-comment">// less than : field < value<br /> </span>db.collection.find({ <span id="wmqeeuq" class="code-quote">"field"</span> : { $gte: value } } ); <span id="wmqeeuq" class="code-comment">// greater than or equal to : field >= value<br /> </span>db.collection.find({ <span id="wmqeeuq" class="code-quote">"field"</span> : { $lte: value } } ); <span id="wmqeeuq" class="code-comment">// less than or equal to : field <= value</span></pre> </div> </div> <p>如查询j大于3,于4:</p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find({j : {$lt: 3}});<br /> db.things.find({j : {$gte: 4}});</pre> </div> </div> <p>也可以合q在一条语句内:</p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.collection.find({ <span id="wmqeeuq" class="code-quote">"field"</span> : { $gt: value1, $lt: value2 } } ); <span id="wmqeeuq" class="code-comment">// value1 < field < value</span></pre> </div> </div> <p> </p> <p> </p> <p>2) 不等?$ne</p> <p>例子Q?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { x : { $ne : 3 } } );</pre> </div> </div> <p> </p> <p> </p> <br /> <br /> 3) in ?not in ($in $nin)<br /> <br /> 语法Q?br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.collection.find( { <span id="wmqeeuq" class="code-quote">"field"</span> : { $in : array } } );</pre> </div> </div> <p>例子Q?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find({j:{$in: [2,4,6]}});</pre> </div> </div> <br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find({j:{$nin: [2,4,6]}});</pre> </div> </div> <br /> <br /> <br /> 4) 取模q算$mod<br /> <br /> 如下面的q算Q?br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( <span id="wmqeeuq" class="code-quote">"<span id="wmqeeuq" class="code-keyword">this</span>.a % 10 == 1"</span>)</pre> </div> </div> <p>可用$mod代替Q?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a : { $mod : [ 10 , 1 ] } } )</pre> </div> </div> <br /> <br /> <br /> 5)  $all<br /> <br /> $all?incMQ但是他需要匹配条件内所有的|<br /> <br /> 如有一个对象:<br /> <br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">{ a: [ 1, 2, 3 ] }</pre> </div> </div> <p>下面q个条g是可以匹配的Q?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a: { $all: [ 2, 3 ] } } );</pre> </div> </div> <p>但是下面q个条g׃行了Q?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a: { $all: [ 2, 3, 4 ] } } );</pre> </div> </div> <br /> <br /> 6)  $size<br /> <br /> $size是匹配数l内的元素数量的Q如有一个对象:{<tt>a:["foo"]</tt>}Q他只有一个元素:<br /> <br /> 下面的语句就可以匚wQ? <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a : { $size: 1 } } );</pre> </div> </div> <p>官网上说不能用来匚w一个范围内的元素,如果x$size<5之类的,他们创徏一个字D|保存元素的数量?/p> <p>You cannot use <tt>$size</tt> to find a range of sizes (for example: arrays with more than 1 element). If you need to query for a range, create an extra <tt>size</tt> field that you increment when you add elements.</p> <p> </p> <p>7Q?exists</p> <p>$exists用来判断一个元素是否存在:</p> <p>如:</p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a : { $exists : <span id="wmqeeuq" class="code-keyword">true</span> } } ); <span id="wmqeeuq" class="code-comment">// <span id="wmqeeuq" class="code-keyword">如果存在</span></span><span id="wmqeeuq" class="code-comment"><span id="wmqeeuq" class="code-keyword">元素</span></span><span id="wmqeeuq" class="code-comment"><span id="wmqeeuq" class="code-keyword">a,p?/span><br /> </span>db.things.find( { a : { $exists : <span id="wmqeeuq" class="code-keyword">false</span> } } ); <span id="wmqeeuq" class="code-comment">// <span id="wmqeeuq" class="code-keyword">如果不存在元素aQ就q回</span></span></pre> </div> </div> <br /> <br /> 8)  $type<br /> <br /> <p><tt>$type</tt> Z <a >bson</a> type来匹配一个元素的cdQ像是按照类型ID来匹配,不过我没扑ֈbsoncd和id对照表?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a : { $type : 2 } } ); <span id="wmqeeuq" class="code-comment">// matches <span id="wmqeeuq" class="code-keyword">if</span> a is a string<br /> </span>db.things.find( { a : { $type : 16 } } ); <span id="wmqeeuq" class="code-comment">// matches <span id="wmqeeuq" class="code-keyword">if</span> a is an <span id="wmqeeuq" class="code-object">int</span></span></pre> </div> </div> <br /> 9Q正则表辑ּ<br /> <br /> mongo支持正则表达式,如:<br /> <br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.customers.find( { name : /acme.*corp/i } ); // 后面的i的意思是区分大小?/pre> </div> </div> <br /> <br /> 10)  查询数据内的?br /> <br /> 下面的查询是查询colors内red的记录,如果colors元素是一个数?数据库将遍历q个数组的元素来查询? <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { colors : <span id="wmqeeuq" class="code-quote">"red"</span> } );</pre> </div> </div> <br /> <br /> 11) $elemMatch<br /> <br /> 如果对象有一个元素是数组Q那?elemMatch可以匚w内数l内的元素:<br /> <br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">> t.find( { x : { $elemMatch : { a : 1, b : { $gt : 1 } } } } ) <br /> { <span id="wmqeeuq" class="code-quote">"_id"</span> : ObjectId(<span id="wmqeeuq" class="code-quote">"4b5783300334000000000aa9"</span>), <span id="wmqeeuq" class="code-quote"><br /> "x"</span> : [ { <span id="wmqeeuq" class="code-quote">"a"</span> : 1, <span id="wmqeeuq" class="code-quote">"b"</span> : 3 }, 7, { <span id="wmqeeuq" class="code-quote">"b"</span> : 99 }, { <span id="wmqeeuq" class="code-quote">"a"</span> : 11 } ]<br /> }</pre> </div> </div> <pre class="code-java">$elemMatch : { a : 1, b : { $gt : 1 } } 所有的条g都要匚w上才行?/pre> <p>注意Q上面的语句和下面是不一L?/p> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">> t.find( { <span id="wmqeeuq" class="code-quote">"x.a"</span> : 1, <span id="wmqeeuq" class="code-quote">"x.b"</span> : { $gt : 1 } } )</pre> </div> </div> <br /> $elemMatch是匹配{ <span id="wmqeeuq" class="code-quote">"a"</span> : 1, <span id="wmqeeuq" class="code-quote">"b"</span> : 3 }Q而后面一句是匚w{ <span id="wmqeeuq" class="code-quote">"b"</span> : 99 }, { <span id="wmqeeuq" class="code-quote">"a"</span> : 11 } <br /> <br /> <br /> 12)  查询嵌入对象的?br /> <br /> <div style="border-width: 1px;" class="code panel"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.postings.find( { <span id="wmqeeuq" class="code-quote">"author.name"</span> : <span id="wmqeeuq" class="code-quote">"joe"</span> } );</pre> </div> </div> <p>注意用法?span class="code-quote">author.name</span>Q用一个点p了。更详细的可以看q个链接Q?<a title="Dot Notation (Reaching into Objects)" >dot notation</a></p> <p>举个例子Q?/p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">> db.blog.save({ title : <span id="wmqeeuq" class="code-quote">"My First Post"</span>, author: {name : <span id="wmqeeuq" class="code-quote">"Jane"</span>, id : 1}})</pre> </div> </div> <p>如果我们要查?authors name 是Jane? 我们可以q样Q?/p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">> db.blog.findOne({<span id="wmqeeuq" class="code-quote">"author.name"</span> : <span id="wmqeeuq" class="code-quote">"Jane"</span>})</pre> </div> </div> <p>如果不用点,那就需要用下面q句才能匚wQ?/p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.blog.findOne({<span id="wmqeeuq" class="code-quote">"author"</span> : {<span id="wmqeeuq" class="code-quote">"name"</span> : <span id="wmqeeuq" class="code-quote">"Jane"</span>, <span id="wmqeeuq" class="code-quote">"id"</span> : 1}})</pre> </div> </div> <p>下面q句Q?/p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.blog.findOne({<span id="wmqeeuq" class="code-quote">"author"</span> : {<span id="wmqeeuq" class="code-quote">"name"</span> : <span id="wmqeeuq" class="code-quote">"Jane"</span>}})</pre> </div> </div> <p>是不能匹配的Q因为mongodb对于子对象,他是_匚w?/p> <p> </p> <p>13) 元操作符 $not 取反</p> <p>如:</p> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.customers.find( { name : { $not : /acme.*corp/i } } );</pre> </div> </div> <div id="wmqeeuq" class="code panel" style="border-width: 1px;"> <div id="wmqeeuq" class="codeContent panelContent"> <pre class="code-java">db.things.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );</pre> </div> </div> <h3> </h3> mongodbq有很多函数可以用,<tt>如排序,l计{,请参考原文?br /> <br /> mongodb目前没有?or)操作W,只能用变通的办法代替Q可以参考下面的链接Q?br /> <br /> <a target="_blank">http://www.mongodb.org/display/DOCS/OR+operations+in+query+expressions</a></tt><br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/ashutc/aggbug/341263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2010-12-21 17:47 <a href="http://www.aygfsteel.com/ashutc/archive/2010/12/21/341263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mongodb pythonhttp://www.aygfsteel.com/ashutc/archive/2010/12/20/341163.html西瓜西瓜Mon, 20 Dec 2010 06:32:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/12/20/341163.htmlhttp://www.aygfsteel.com/ashutc/comments/341163.htmlhttp://www.aygfsteel.com/ashutc/archive/2010/12/20/341163.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/341163.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/341163.htmlhttp://www.mongodb.org 下蝲mongodb版本

安装pymongo模块?a target="_blank">http://api.mongodb.org/python/
按照版本安装相应模块。自动默认到python安装目录
#coding=utf-8

from pymongo import Connection

conn
= Connection("localhost")

db
= conn.foo

test
= {"id":1, "novle":"试一?/span>"}

db.foo.save(test)

cursor
= db.foo.find()

for i in cursor:

print i

虽然报错Q不影响执行

out

 

{u'_id': ObjectId('4bc193c11724bc0cc4000000'), u'id': 1, u'novle': u'\ufffd\ufffd\ufffd\ufffd'}


 

OK 试成功

 

下次  是?怎么在DJANGO里面 使用mongodb?/p>







西瓜 2010-12-20 14:32 发表评论
]]>
MongoDB入门?/title><link>http://www.aygfsteel.com/ashutc/archive/2010/12/20/341161.html</link><dc:creator>西瓜</dc:creator><author>西瓜</author><pubDate>Mon, 20 Dec 2010 06:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/ashutc/archive/2010/12/20/341161.html</guid><wfw:comment>http://www.aygfsteel.com/ashutc/comments/341161.html</wfw:comment><comments>http://www.aygfsteel.com/ashutc/archive/2010/12/20/341161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ashutc/comments/commentRss/341161.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ashutc/services/trackbacks/341161.html</trackback:ping><description><![CDATA[<br /> <p>MongoDB把数据存储在文g中(默认路径为:/data/dbQ,为提高效率用内存映文件进行管理?/p> <p>安装Q?br /> Linux/OS X?<br /> 1 建立数据目录<br />  mkdir -p /data/db<br /> 2 下蝲压羃?br />  curl -O <a >http://downloads.mongodb.org/linux/mongodb-linux-i686-latest.tgz</a><br /> 3 解压~文?br />  tar xzf mongodb-linux-i386-latest.tgz<br /> 4 启动服务<br />  bin/mongod run &<br /> 5 使用自带客户端连?br />  /bin/mongo<br /> 6 试<br />  db.foo.save( { a : 1 } )<br />  db.foo.findOne()</p> <p>windows下:<br /> 1 建立数据目录c:\data\db<br /> 2 下蝲压羃包,解压文g<br /> 3 启动服务<br />  bin\mongod.exe run<br /> 4 自带客户?br />  bin\mongon.exe</p> <p>在LINUX和WINDOWSpȝ下的使用大同异Q不同的地方主要是默认的数据存储目录。LINUXcȝl下存放?data/db下,而WINDOWS</p> <p>会存攑֜C:\data\db下。可以在启动时?-dbpath参数指定存储目录q启动。如Qbin\mongod.exe --dbpath d:\data\mongo</p> <p>常用启动参数Q?br /> run 直接启动。例Q?/mongod run<br /> --dbpath 指定特定存储目录启动Q若目录不存在则创徏。例Q?/mongod --dbpath /var/data/mongo<br /> --port 指定端口启动。例Q?/mongod --port 12345</p> <p>停止MONGO服务Q?br /> Ҏ1Q服务端停止Q可使用Ctrl+C<br /> Ҏ2Q在客户端停止,可先q接客户?br />  ./mongo<br />  q用命?br />  db.shutdownerver()<br />  然后退出客L<br />  exit</p> <p>使用JAVA语言操作MONGODB非常单,只要驱动文件加入到CLASSPATH中就可以使用?/p> <p>1 建立q接<br />   要徏立MongoDB的连接,你只要指定要q接到的数据库就可以。这个数据库不一定存在,如果不存在,MongoDB会先Z建立q个</p> <p>库。同Ӟ在连接时你也可以具体指定要连接到的网l地址和端口。下面的是连接本机数据库的一些例子:</p> <p>import com.mongodb.Mongo;<br /> import com.mongodb.DBCollection;<br /> import com.mongodb.BasicDBObject;<br /> import com.mongodb.DBObject;<br /> import com.mongodb.DBCursor;<br /> import com.mongodb.MongoAdmin;</p> <p>Mongo db = new Mongo("mydb");<br /> Mongo db = new Mongo("localhost", "mydb");<br /> Mongo db = new Mongo("localhost", 27017, "mydb");</p> <p>2 安全验证Q非必选)<br /> MongoDB服务可以在安全模式运行,此时M客户端要q接数据库时需使用用户名和密码。在JAVA中可使用如下Ҏq接Q?/p> <p>boolean auth = db.authenticate(userName, password);</p> <p>如果用户名密码验证通过Q返回gؓtrueQ否则ؓfalse</p> <p>3 获取集合列表<br /> 每个数据库都存在零个或多个集合,需要时你可以获得他们的列表Q?/p> <p>Set<String> colls = db.getCollectionNames();<br /> for(String s : colls){<br />  System.out.println(s);<br /> }</p> <p>4 获得一个集?br /> 要获得某个特定集合,你可以指定集合的名字Qƈ使用getCollection()ҎQ?/p> <p>DBCollection coll = db.getCollection("testCollection");</p> <p>当你获取了这个集合对象,你就可以Ҏ据进行增删查改之cȝ操作?/p> <p>5 插入文档<br /> 当你获得了一个集合对象,你就可以把文档插入到q个对象中。例如,存在一个JSON式的文档:<br /> {<br />  "name" : "MongoDB",<br />  "type" : "database",<br />  "count" : 1,<br />  "info" : {<br />    x : 203,<br />    y : 102<br />   }<br /> }<br /> h意,q个文档包含一个内部文档。我们可以用BasicDBObjectcL创徏q个文档Qƈ且用insert()Ҏ方便地将它插入到?/p> <p>合中?/p> <p>BasicDBObject doc = new BasicDBObject();<br /> doc.put("name", "MongoDB");<br /> doc.put("type", "database");<br /> doc.put("count", 1);</p> <p>BasicDBObject info = new BasicDBObject();<br /> info.put("x", 203);<br /> info.put("y", 102);</p> <p>doc.put("info", info);</p> <p>coll.insert(doc);</p> <p>6 使用findOne()查找集合中第一个文?br /> 要查找我们上一步插入的那个文档Q可以简单地使用findOne()操作来获取集合中W一个文档。这个方法返回一个单一文档Q这是相对于使用DBCursor的find()操作的返回)Q这对于只有一个文档或我们刚插入第一个文档时很有用,因ؓ此时q不需要用光标?/p> <p>DBObject myDoc = coll.findOne();<br /> System.out.println(myDoc);</p> <p>q回cMQ?br /> {<br />  "_id" : "ac907a1f5b9d5e4a233ed300" ,<br />  "name" : "MongoDB" ,<br />  "type" : 1 , <br />  "info" : { <br />   "x" : 203 ,<br />   "y" : 102} , <br />  "_ns" : "testCollection"<br /> }</p> <p>注意_id和_ns元素是由MongoDB自动加入你的文档。记住:MongoDB内部存储使用的元素名是以“_”做ؓ开始?/p> <p>7 加入多种文档<br /> Z做更多有的查询试验Q让我们向集合中加入多种文档cdQ象Q?br /> {<br />  "i" : value<br /> }<br /> 可以通过循环来实?/p> <p>for(int i = 0; i < 100; i++){<br />  coll.insert(new BasicDBObject().append("i", i));<br /> }</p> <p>注意我们可以在一个集合中插入不同cd的文档,q就是我们所说的“模式自由”Qschema-freeQ?/p> <p>8 l计文档数量<br />  使用getCount()Ҏ</p> <p>System.out.println(coll.getCount());</p> <p>9 使用光标QcursorQ来获取全部文档<br /> Z获取集合中的所有文档,我们可以使用find()Ҏ。这个方法返回一上DBCursor对象Q来允许我们符合查询条件的文档q代</p> <p>出来?/p> <p>DBCursor cur = coll.find();<br /> while(cur.hasNext()){<br />  System.out.println(cur.next());<br /> }</p> <p>10 在查询中获取单一文档<br /> 我们可以创徏一个查询,q传递给find()Ҏ来获取集合中所有文档的一个子集。例如,我们惌查询域名?i"Qƈ且gؓ71的文档:</p> <p>BasicDBObject query = new BasicDBObject();<br /> query.put("i", 71);<br /> cur = coll.find(query);<br /> while(cur.hasNext()){<br />  System.out.println(cur.next());<br /> }</p> <p>11 使用条g查询获取集合<br /> 例如Q我们想要查询所有i>50的文档:</p> <p>BasicDBObject query = new BasicDBObject();<br /> query.put("i", new BasicDBObject("$gt", 50));<br /> cur = coll.find(query);<br /> while(cur.hasNext()){<br />  System.out.println(cur.next());<br /> }</p> <p>当然Q我们也可以?0 < i <= 30的查?/p> <p>BasicDBObject query = new BasicDBObject();<br /> query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));<br /> cur = coll.find(query);<br /> while(cur.hasNext()){<br />  System.out.println(cur.next());<br /> }</p> <p>12 创徏索引<br /> MongoDB支持索引Q而且很容易在集合上增加烦引。要创徏索引Q只需要指定要加烦引的属性,q且指定升序Q?Q或降序卛_Q?1Q?/p> <p>coll.createIndex(new BasicDBObject("i", 1));</p> <p>13 获取索引列表</p> <p>List<DBObject> list = coll.getIndexInfo();<br /> for(DBObject o : list){<br />  System.out.println(o);<br /> }</p> <p>14 MongoDB理函数<br /> 理函数在com.mongodb.MongoAdmincM定义?br /> 例AQ获取数据库列表<br />  MongoAdmin admin = new MongoAdmin();<br />  for(String s : admin.getDatabaseNames()){<br />   System.out.println(s);<br />  }</p> <p>例BQ获取数据库对象<br />  Mongo m = admin.getDB("mydb");</p> <p>例CQ删除数据库<br />  admin.dropDatabase("mydb");</p> <p>15 用DBObject存储JAVA对象<br /> MongoDB for JAVA驱动中提供了用于向数据库中存储普通对象的接口DBObject<br /> 例如Q存在一个需要存储的对象cTweet<br /> public class Tweet implements DBObject{<br />  /*...*/<br /> }<br /> 可以使用如下代码Q?/p> <p>Tweet myTweet = new Tweet();<br /> myTweet.put("user", userId);<br /> myTweet.put("message", message);<br /> myTweet.put("date", new Date());</p> <p>collection.insert(myTweet);</p> <p>当一个文档从MongoDB中取出时Q它会自动把文档转换成DBObject接口cdQ要它实例化ؓ你的对象Q需使用</p> <p>DBCollection.setObjectClass()?br /> collection.setObjectClass(Tweet);<br /> Tweet myTweet = (Tweet)collection.findOne();</p> <p>16 JAVA驱动的ƈ发?br /> JAVA的MongoDB驱动是线E安全的。如果你它用在WEB服务中,可以创徏它的一个单例,q在所有请求中使用它?/p> <p>然而,如果你需要在一个会话(例如HTTPhQ中保证事务一致性,也许你会希望在这个会话中寚w动用同一个端口。这仅仅?/p> <p>h量非常大的环境中Q例如你l常会读取刚写入的数据?br /> Zq一点,你需要用如下代码:<br /> Mongo m;<br /> m.restartStart();</p> <p>// code.........</p> <p>m.requestDone();</p> <p><br /> 以上介绍了简单的mongoDB使用Q更多信息请查阅MongoDB API for Java?/p> <br /> <br /> <br /> <br /> <br /> <br /> <img src ="http://www.aygfsteel.com/ashutc/aggbug/341161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ashutc/" target="_blank">西瓜</a> 2010-12-20 14:28 <a href="http://www.aygfsteel.com/ashutc/archive/2010/12/20/341161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MongoDb 命ohttp://www.aygfsteel.com/ashutc/archive/2010/12/20/341160.html西瓜西瓜Mon, 20 Dec 2010 06:25:00 GMThttp://www.aygfsteel.com/ashutc/archive/2010/12/20/341160.htmlhttp://www.aygfsteel.com/ashutc/comments/341160.htmlhttp://www.aygfsteel.com/ashutc/archive/2010/12/20/341160.html#Feedback0http://www.aygfsteel.com/ashutc/comments/commentRss/341160.htmlhttp://www.aygfsteel.com/ashutc/services/trackbacks/341160.html

CODE:

> show dbs
如果x看当前连接在哪个数据库下面,可以直接输入db

CODE:

> db
Admin
惛_换到test数据库下?

CODE:

> use test
switched to db test
> db
Test
x看test下有哪些表或者叫collectionQ可以输?

CODE:

> show collections
system.indexes
user
想知道mongodb支持哪些命oQ可以直接输入help

CODE:

> help
HELP
      show dbs                     show database names
      show collections             show collections in current database
      show users                   show users in current database
      show profile                 show most recent system.profile entries with time >= 1ms
      use <db name>                set curent database to <db name>
      db.help()                    help on DB methods
      db.foo.help()                help on collection methods
      db.foo.find()                list objects in collection foo
      db.foo.find( { a : 1 } )     list objects in foo where a == 1
      it                           result of the last line evaluated; use to further iterate
如果想知道当前数据库支持哪些ҎQ?

CODE:

> db.help();
DB methods:
      db.addUser(username, password) d数据库授权用?br />       db.auth(username, password)                讉K认证
      db.cloneDatabase(fromhost) 克隆数据?br />       db.commandHelp(name) returns the help for the command
      db.copyDatabase(fromdb, todb, fromhost)  复制数据?br />       db.createCollection(name, { size : ..., capped : ..., max : ... } ) 创徏?br />       db.currentOp() displays the current operation in the db
      db.dropDatabase()        删除当前数据?br />       db.eval_r(func, args) run code server-side
      db.getCollection(cname) same as db['cname'] or db.cname
      db.getCollectionNames()        获取当前数据库的表名
      db.getLastError() - just returns the err msg string
      db.getLastErrorObj() - return full status object
      db.getMongo() get the server connection object
      db.getMongo().setSlaveOk() allow this connection to read from the nonmaster member of a replica pair
      db.getName()
      db.getPrevError()
      db.getProfilingLevel()
      db.getReplicationInfo()
      db.getSisterDB(name) get the db at the same server as this onew
      db.killOp() kills the current operation in the db
      db.printCollectionStats()   打印各表的状态信?br />       db.printReplicationInfo()        打印L据库的复制状态信?br />       db.printSlaveReplicationInfo()        打印从数据库的复制状态信?br />       db.printShardingStatus()                打印分片状态信?br />       db.removeUser(username) 删除数据库用?br />       db.repairDatabase() 修复数据?br />       db.resetError()
      db.runCommand(cmdObj) run a database command.  if cmdObj is a string, turns it into { cmdObj : 1 }
      db.setProfilingLevel(level) 0=off 1=slow 2=all
      db.shutdownServer()
      db.version() current version of the server
如果想知道当前数据库下的表或者表collection支持哪些ҎQ可以用一下命令如Q?

CODE:

> db.user.help();  user?br /> DBCollection help
      db.foo.count()                l计表的行数
      db.foo.dataSize()        l计表数据的大小
      db.foo.distinct( key ) - eg. db.foo.distinct( 'x' )                按照l定的条仉?br />       db.foo.drop() drop the collection 删除?br />       db.foo.dropIndex(name)  删除指定索引
      db.foo.dropIndexes() 删除所有烦?br />       db.foo.ensureIndex(keypattern,options) - options should be an object with these possible fields: name, unique, dropDups  增加索引
      db.foo.find( [query] , [fields]) - first parameter is an optional query filter. second parameter is optional set of fields to return. Ҏ条g查找数据
-----------------------
通过条g查询Q?db.foo.find( { x : 77 } , { name : 1 , x : 1 } )
-----------------------------
      db.foo.find(...).count()
      db.foo.find(...).limit(n) Ҏ条g查找数据q返回指定记录数
      db.foo.find(...).skip(n)
      db.foo.find(...).sort(...) 查找排序
      db.foo.findOne([query]) Ҏ条g查询只查询一条数?br />       db.foo.getDB() get DB object associated with collection  q回表所属的?br />       db.foo.getIndexes() 昄表的所有烦?br />       db.foo.group( { key : ..., initial: ..., reduce : ...[, cond: ...] } ) Ҏ条g分组
      db.foo.mapReduce( mapFunction , reduceFunction , <optional params> )
      db.foo.remove(query) Ҏ条g删除数据
      db.foo.renameCollection( newName ) renames the collection  重命名表
      db.foo.save(obj) 保存数据
      db.foo.stats()  查看表的状?br />       db.foo.storageSize() - includes free space allocated to this collection 查询分配到表I间大小
      db.foo.totalIndexSize() - size in bytes of all the indexes 查询所有烦引的大小
      db.foo.totalSize() - storage allocated for all data and indexes 查询表的d?br />       db.foo.update(query, object[, upsert_bool]) Ҏ条g更新数据
      db.foo.validate() - SLOW 验证表的详细信息
      db.foo.getShardVersion() - only for use with sharding
Mongodb的备份工具mongodump

如果惛_份数据库test 如:

CODE:

[falcon@www.fwphp.cn  ~/mongodb/bin]$ ./mongodump --help
options:
 --help                   produce help message
 -h [ --host ] arg        mongo host to connect to
 -d [ --db ] arg          database to use
 -c [ --collection ] arg  collection to use (some commands)
 -u [ --username ] arg    username
 -p [ --password ] arg    password
 --dbpath arg             directly access mongod data files in this path,
                         instead of connecting to a mongod instance
 -v [ --verbose ]         be more verbose (include multiple times for more
                         verbosity e.g. -vvvvv)
 -o [ --out ] arg (=dump) output directory
[falcon@www.fwphp.cn  ~/mongodb/bin]$ [color=Blue]./mongodump -d test -o test/[/color]
connected to: 127.0.0.1
DATABASE: test         to         test/test
      test.user to test/test/user.bson
               100000 objects
      test.system.indexes to test/test/system.indexes.bson
               1 objects
[falcon@www.fwphp.cn  ~/mongodb/bin]$ ls
   mongo   mongodump    mongofiles   mongorestore  mongosniff
dump  mongod  mongoexport  mongoimport  mongos     test
MongoDB的数据恢复工具mongorestore

查看test库中的表

CODE:

> show collections
system.indexes
User
删除user?

CODE:

> db.user.drop();
True

> show collections
System.indexes
现在利用mongorestore表恢复刚才利用mongodump备䆾的数?

CODE:

[falcon@www.fwphp.cn  ~/mongodb/bin]$ ./mongorestore --help
usage: ./mongorestore [options] [directory or filename to restore from]
options:
 --help                  produce help message
 -h [ --host ] arg       mongo host to connect to
 -d [ --db ] arg         database to use
 -c [ --collection ] arg collection to use (some commands)
 -u [ --username ] arg   username
 -p [ --password ] arg   password
 --dbpath arg            directly access mongod data files in this path,
                        instead of connecting to a mongod instance
 -v [ --verbose ]        be more verbose (include multiple times for more
                        verbosity e.g. -vvvvv)

[falcon@www.fwphp.cn  ~/mongodb/bin]$ ./mongorestore -d test -c user test/test/user.bson
connected to: 127.0.0.1
test/test/user.bson
       going into namespace [test.user]

       100000 objects
User表中?0w条记录已l恢?

CODE:

> show collections
system.indexes
user
> db.user.find();
{ "_id" : ObjectId("4b9c8db08ead0e3347000000"), "uid" : 1, "username" : "Falcon.C-1" }
{ "_id" : ObjectId("4b9c8db08ead0e3347010000"), "uid" : 2, "username" : "Falcon.C-2" }
{ "_id" : ObjectId("4b9c8db08ead0e3347020000"), "uid" : 3, "username" : "Falcon.C-3" }
{ "_id" : ObjectId("4b9c8db08ead0e3347030000"), "uid" : 4, "username" : "Falcon.C-4" }
{ "_id" : ObjectId("4b9c8db08ead0e3347040000"), "uid" : 5, "username" : "Falcon.C-5" }
.................
has more




   1. 用户相关Q?/span>

        
#增加或修改用户密?br />
        
db.addUser('admin','pwd')

        
#查看用户列表

        
db.system.users.find()

        
#用户认证

        
db.auth('admin','pwd')

         
#删除用户

        
db.removeUser('mongodb')

        
#查看所有用?br />
        
show users

        
#查看所有数据库

        
show dbs

        
#查看所有的collection

        
show collections

        
#查看各collection的状?br />
        
db.printCollectionStats()

        
#查看M复制状?br />
        
db.printReplicationInfo()

        
#修复数据?br />
        
db.repairDatabase()

        
#讄记录profilingQ?/span>0=off 1=slow 2=all

        
db.setProfilingLevel(1)

        
#查看profiling

        
show profile

        
#拯数据?br />
        
db.copyDatabase('mail_addr','mail_addr_tmp')

        
#删除collection

        
db.mail_addr.drop()

        
#删除当前的数据库

        
db.dropDatabase()

   
2. 客户端连?br />
          
/usr/local/mongodb/bin/mongo user_addr -u user -'pwd'

   
3. 增删?br />
        
  #存储嵌套的对?br />
         
db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})

         
#存储数组对象

         
db.user_addr.save({'Uid':'yushunzhi@sohu.com','Al':['test-1@sohu.com','test-2@sohu.com']})

         
#Ҏquery条g修改Q如果不存在则插入,允许修改多条记录

         
db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)

         
#删除yy=5的记?br />
         
db.foo.remove({'yy':5})

         
#删除所有的记录

        
db.foo.remove()

   
4. 索引

         
增加索引Q?/span>1(ascending),-1(descending)

         
db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true});

         
#索引子对?br />
         
db.user_addr.ensureIndex({'Al.Em'1})

         
#查看索引信息

         
db.deliver_status.getIndexes()

         
db.deliver_status.getIndexKeys()

         
#Ҏ索引名删除烦?br />
         
db.user_addr.dropIndex('Al.Em_1')

   
5. 查询

         
查找所?br />
         
db.foo.find()

         
#查找一条记?br />
         
db.foo.findOne()

         
#Ҏ条g?0条记?br />
         
db.foo.find({'msg':'Hello 1'}).limit(10)

         
#sort排序

         
db.deliver_status.find({'From':'yushunzhi@sohu.com'}).sort({'Dt',-1})

         
db.deliver_status.find().sort({'Ct':-1}).limit(1)

        
#count操作

        
db.user_addr.count()

        
#distinct操作

        
db.foo.distinct('msg')

        
#>操作

        
db.foo.find({"timestamp": {"$gte" : 2}})

        
#子对象的查找

        
db.foo.find({'address.city':'beijing'})

   
6. 理

         
查看collection数据的大?br />
         
db.deliver_status.dataSize()

         
#查看colleciont状?br />
         
db.deliver_status.stats()

         
#查询所有烦引的大小

         
db.deliver_status.totalIndexSize()
















西瓜 2010-12-20 14:25 发表评论
]]>
վ֩ģ壺 | ̨| | Ժ| ϼ| | ֣| | ɽ| | | Ž| | ƽ| | ۷| | ̫ԭ| ɽ| ˮ| ԭ| Ͼ| | | | ʢ| | | | | | | | ̶| | ˹| żҸ| Ǩ| Ӱ| ƽ| Ϳ|