02.MongoDB實戰之第二篇

來源:互聯網
上載者:User
文章目錄
  • 2.1 普通無條件查詢
  • 2.2.1 單條件查詢

上一篇簡答描述了一下的MongoDB的介紹,這一篇要進入主題了,來記錄MangoDB的用法

1.Save增加資料
> db.foo.save({"name":"xiaoming"})> db.foo.find(){ "_id" : ObjectId("51e50e633c10628f02cfb779"), "name" : "xiaoming" }

save用來增加一條資料幾點需要注意:

  • 不需要預先建立一個集合(也就是資料表),在第一次插入資料的時候會自動建立
  • 可以儲存任何的資料結構,不需要類似於alter table語句來修改你的資料結構
  • 每次插入新資料時會在集合中建立一個ID,名字叫_id
可以多增加點資料
> db.foo.save({'name':'xiaoming',age:10,score:90})> db.foo.save({'name':'xiaozhang',age:10,score:85})> db.foo.save({'name':'xiaoli',age:11,score:99})> db.foo.save({'name':'xiaomeng',age:11,score:100})> db.foo.find(){ "_id" : ObjectId("51e50e633c10628f02cfb779"), "name" : "xiaoming" }{ "_id" : ObjectId("51e510133c10628f02cfb77a"), "name" : "xiaoming", "age" : 10, "score" : 90 }{ "_id" : ObjectId("51e510243c10628f02cfb77b"), "name" : "xiaozhang", "age" : 10, "score" : 85 }{ "_id" : ObjectId("51e510353c10628f02cfb77c"), "name" : "xiaoli", "age" : 11, "score" : 99 }{ "_id" : ObjectId("51e510403c10628f02cfb77d"), "name" : "xiaomeng", "age" : 11, "score" : 100 }>
2.查詢記錄2.1 普通無條件查詢在上文中已經看到這樣一個操作,它是查詢foo這個集合中的所有資料
> db.foo.find()

返回遊標對象:

> var cursor=db.foo.find()> while(cursor.hasNext())printjson(cursor.next()){ "_id" : ObjectId("51e50e633c10628f02cfb779"), "name" : "xiaoming" }{        "_id" : ObjectId("51e510133c10628f02cfb77a"),        "name" : "xiaoming",        "age" : 10,        "score" : 90}{        "_id" : ObjectId("51e510243c10628f02cfb77b"),        "name" : "xiaozhang",        "age" : 10,        "score" : 85}{        "_id" : ObjectId("51e510353c10628f02cfb77c"),        "name" : "xiaoli",        "age" : 11,        "score" : 99}{        "_id" : ObjectId("51e510403c10628f02cfb77d"),        "name" : "xiaomeng",        "age" : 11,        "score" : 100}>

上面的例子顯示了遊標風格的迭代輸出,hasNext()函數告訴我們是否還有資料,如果有則可以調用next()函數擷取資料。

mongodb採用的是JavaScript shell,可以用到JS的特性,forEach就可以輸出遊標了。如下:
> var cursor=db.foo.find()> while(cursor.hasNext())printjson(cursor.next()){ "_id" : ObjectId("51e50e633c10628f02cfb779"), "name" : "xiaoming" }{        "_id" : ObjectId("51e510133c10628f02cfb77a"),        "name" : "xiaoming",        "age" : 10,        "score" : 90}{        "_id" : ObjectId("51e510243c10628f02cfb77b"),        "name" : "xiaozhang",        "age" : 10,        "score" : 85}{        "_id" : ObjectId("51e510353c10628f02cfb77c"),        "name" : "xiaoli",        "age" : 11,        "score" : 99}{        "_id" : ObjectId("51e510403c10628f02cfb77d"),        "name" : "xiaomeng",        "age" : 11,        "score" : 100}>

能達到和while同樣的效果

在MongoDB shell裡,我們可以把遊標當作資料來用:
> var cursor=db.foo.find();> printjson(cursor[1]){        "_id" : ObjectId("51e510133c10628f02cfb77a"),        "name" : "xiaoming",        "age" : 10,        "score" : 90}>

不過要注意的是,使用上面這種方式,要注意佔用記憶體的問題,特別是很大的遊標對象,有可能會記憶體溢出,所以應該用迭代的方式來輸出。下面是把遊標轉換成真實的數群組類型:

> var arr=db.foo.find().toArray()> arr[2]{        "_id" : ObjectId("51e510243c10628f02cfb77b"),        "name" : "xiaozhang",        "age" : 10,        "score" : 85}

請注意,這此特性只是在MongoDB Sehll裡使用,而不是所有的其他應用程式驅動都支援。如果其他使用者在集合裡第一次或者最後一次調用netx(),你可能得到不遊標裡的資料。所以要明確的鎖定你要查詢的遊標。2.2 條件查詢2.2.1 單條件查詢

> db.foo.find({name:'xiaoming'}){ "_id" : ObjectId("51e50e633c10628f02cfb779"), "name" : "xiaoming" }{ "_id" : ObjectId("51e510133c10628f02cfb77a"), "name" : "xiaoming", "age" : 10, "score" : 90 }>

相當於SQL

SELECT * FROM foo WHERE name='xiaoming'
查詢指定條件下返回資料結果(類似於返回表裡某個欄位)
> db.foo.find({name:'xiaoming'},{name:true}){ "_id" : ObjectId("51e50e633c10628f02cfb779"), "name" : "xiaoming" }{ "_id" : ObjectId("51e510133c10628f02cfb77a"), "name" : "xiaoming" }

對應SQL語句

SELECT name FROM foo WHERE name='xiaoming'

2.2.2  多條件查詢未完,待續......
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.