mongodb嵌套存儲
1)列出當前的資料庫
MongoDB shell version: 1.8.1
connecting to: test
> show dbs -www.linuxidc.com-
admin 0.03125GB
local (empty)
可以使用show dbs來列出當前有多少個資料庫,上面看到的是有兩個,分別是admin和local。
2) 定義新的資料庫名
我們通過使用「use new-databasename」的語法去使用一個新的資料庫,注意,即使你的資料庫還沒建立起來,依然可以這樣使用,因為mongodb會在真正插入了數據後,才會真正建立起來。
>use mkyongdb
switched to db mkyongdb
> show dbs
admin 0.03125GB
local (empty)
注意,在use mkyongdb後,mkyongdb實際上還沒真正建立起來,只是表明目前是在使用mkyongdb了。
3)保存數據
定義一個collection,名為「users」,然後插入數據,如下:
> db.users.save( {username:"mkyong"} )
> db.users.find()
{ "_id" : ObjectId("4dbac7bfea37068bd0987573"), "username" : "mkyong" }
>
> show dbs -www.linuxidc.com-
admin 0.03125GB
local (empty)
mkyongdb 0.03125GB
可以看到,用db.users.find()可以找出已插入的數據。這個時候,名為「users」的collection已經建立起來了,同時,資料庫mkyongdb也建立起來了。
B. nodejs mongodb嵌套數據
標準的js對象訪問過程,以newPeople為例,訪問phone:
var phone = newPeople.friend[0].phone;
賦值類似。
這種數組類型的內置文檔,mongodb中有專門操作的API,可以操作數組的元素。
C. MongoDB如何進行嵌套查詢
你得用兩個query,不能在一個里完成。
但是因為mongodb一般都把正在用的數據放在內存里,所以兩個query也不會太慢。如果你的程序和mongodb之間的連接成為瓶頸,必須要用一個query的話,你可以用stored javascript。慕課網上有很多類似的視頻教程,你可以看看。
D. mongodb使用嵌套存放數據是不是會影響效率
會的。會讓效率更高。
因為如果你不embed在這個collection的doc里,就需要另一個collection來存這個數據。這樣就會需要兩個query才能得到數據。
E. mongodb存儲文件如何存儲
您好,你的問題,我之前好像也遇到過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!以文檔形式存儲數據的。一個document對象包含任意多個key-value格式的數據。可以嵌套使用數組等。。非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!
F. Mongodb多層嵌套數組如何更好的查詢
直接在程序里把不匹配的數組元素濾掉最簡單了。會作為個體被查詢的數據最好不要放在數組裡面,mongodb的查詢對數組元素是比較弱的,以前(2.2或者2.4以前)沒有$elemMatch操作符,連查詢一個特定元素符合兩個條件都做不到,只能查詢數組裡面存在符合這兩個條件的元素。舉例來說就是既可能命中{array:[{a:1,b:1}]}也可能命中{array:[{a:1},{b:1}]}。
因此我認為把商品單列出來會比較合適。
G. mongodb資料庫適合做什麼
mongodb眾所周知不支持事務,所以需要強事務的業務根本不能考慮mongodb。
mongodb的優勢就是文檔存儲:
1. 業務經常變動,需要不時的添加欄位,那麼mongodb比較適合,關系型資料庫添加欄位的復雜度也還好
2. 嵌套文檔,業務數據比較復雜,適合嵌套文檔式存儲,那麼mongodb非常合適,這個關系型資料庫比較難搞,雖然MySQL和pg也有文檔存儲,但MySQL的不成熟,pg畢竟現在生產中使用還是偏少,個人也不了解,這里不談。但這不僅僅這一點優勢,具體下面會細說。
3. upsert支持,查詢速度也不慢
4. 高可用的副本集支持
5. 查詢語法非常豐富,嵌套文檔查詢功能非常強大,不是重度用戶可能不能理解
下面說說一個具體的使用事例:
項目的一條數據在10kb左右,如果使用關系型資料庫那麼需要將這條數據拆分成大概幾百條左右,建造多個表,設計較復雜,這種數據大概在一百萬條左右,想想拆分後在十幾億的數據量就可怕。打平後的數據什麼DB也都可以拿下,只是一百萬變十幾億比較恐怖而已。
如果採用MySQL存儲,每次查詢需要使用外鍵查詢多個表,從這些表中拉取數據,性能肯定要下降很多,比不上只在一個表查詢,而且只拉取少兩個數量級的數據。查詢也還好,業務允許可以對結果做緩存,放到redis里去。
但是重點來了,需求要增量更新部分數據,這時候需要更新多個表,根本沒法做到原子性(注意事務不是原子操作),當然也可以使用cas等技術補償,達到最終一致性。但使用mongodb存儲只需要update一條數據,對相應的嵌套文檔中內容更新,可以做到原子性,是不是很方便?
推薦學習《python教程》
具體說說該項目的難點,查詢無法使用緩存,可能會很吃驚,但是業務決定了確實做不了,而且增量更新的量達到上萬的QPS,如果不能保證原子性想想多麼可怕!
所以mongodb在這里幫了大忙,關系型資料庫解決不了這個難題。
有人可能要問,mongodb沒有事務,上游數據寫入也會有問題,你不可能所有數據都存一個表吧?
當然不是的,我們mongodb里的數據是從MySQL中清洗出來存到mongodb中的,mongodb只做單點的業務需求,綜合的數據還是在MySQL中。
此項目我們用了上百個副本集,保證系統的高可用,這些副本集配置只要一條shell就搞定,如果用MySQL的主從不知道怎麼配(我自己不懂),估計DBA得忙死,而該項目完全不需要也沒用到DBA。
說了這么多mongo的優點,也說說他的缺點:
1. 查詢優化器和MySQL沒法比
2. 不支持reload,只能冷重啟,初始化配置的時候比較麻煩
3. 沒有事務,不敢存儲第一手數據,多用來做備份數據的存儲
mongodb可以做很多事情,取決於你腦洞,性能不差,存一些相對不重要的數據,mongodb嵌套文檔功能強大,多看看官方文檔挖掘挖掘有用信息,每次都能發現驚喜。