MongoDB University筆記總結-M001_Chapter 5: Indexing and Aggregation Pipeline

洛yu發表於2020-11-30

Source: MongoDB University   https://university.mongodb.com/

Course: M001 MongoDB bascis 

 

【Chapter 5】: Indexing and Aggregation Pipeline

Key points:

1.Aggregation Framework

2.sort() and limit()

3.Introduction to Indexes

4.Introduction to Data Modeling

5.Upinsert -- Update or Insert?

 

1.Aggregation Framework

aggregate

查詢listingsAndReviews表中,amentities中含有wifi資料,只顯示價格和地址資訊。

db.listingsAndReviews.aggregate([

                                                        { "$match": { "amenities": "Wifi" } },

                                                         { "$project": { "price": 1, "address": 1, "_id": 0 }}]).pretty()

等同於:

db.listingsAndReviews.find({ "amenities": "Wifi" }, { "price": 1, "address": 1, "_id": 0 }).pretty()

 

$group 分組統計

語法如下:

{$group:{

_id:<expression>,// group by Expression

<field1>:{<accumulator1>:<expression1>},

...}}

例:

按照address中的country統計資料的個數,只顯示address。

db.listingsAndReviews.aggregate([

                                                       { "$project": { "address": 1, "_id": 0 }},

                                                        { "$group": { "_id": "$address.country", "count": { "$sum": 1 } } } ])

 

2.sort() and limit()

sort()將資料進行排序,

1 是正序A-Z

-1 是逆序 Z-A

 

limit()用來指定顯示的資料行數,。

limit(1)只顯示一行結果

例:zips表中針對pop列進行倒序排列,並只顯示10行

db.zips.find().sort({ "pop": -1 }).limit(10)

 

limit().sort()與 sort().limit()結果相同。

 

3.Introduction to Indexes

用來使查詢更為快速,避免使用sort

例:給trips表中的birth year按照正序新增索引

db.trips.createIndex({"birth year":1})

1 代表正序A-Z

-1 代表逆序Z-A

可以同時新增多個索引。

 

4.Introduction to Data Modeling

更多資料參考:https://docs.mongodb.com/manual/core/data-modeling-introduction/

 

5.Upinsert -- Update or Insert?

update:

db.collection.updateOne({<query to locate>},{<update>})

Upinsert is a hybrid of update and inserts,it should only be used when it is needed.

如果upsert為 true,則如果需要更新的資料存在是則更新,若更新的數不存在的時候,插入一條新資料。

db.collection.updateOne({<query>},{<update>},{"upsert":true})

 

 

相關文章