之前只學過sql,第一次使用非關係型資料庫。以前對於關係型資料庫與非關係型資料庫的概念很模糊,通過這次的學習對這兩者有了一個清晰的概念。
主鍵
在MongoDB中,主鍵名叫"_id",如果在生成資料的時候,使用者不主動為其分配一個主鍵的話,MongoDB會自動生成一個隨機分配的值。
第一條資料是我一開始忘了分配主鍵,MongoDB自動生成的值,型別為ObjectId。
第二條資料是我主動分配主鍵,型別為String。
查詢的時候也不一樣:
查詢語句(find)
集合簡單查詢方法
MongoDB語法:db.colloection.find()
sql:select * from collection
複製程式碼
collection是集合的名稱,類似於sql的table。
返回制定的鍵值
MongoDB:db.collection.find({},{"teamName":1})
sql:select teamName from collection複製程式碼
條件過濾
MongoDB:db.collection.find({"teamName":"good"})
sql:select * from collection where teamName = "good"複製程式碼
查詢全格式
db.collection.find({查詢條件},{查詢列})複製程式碼
增(insert):
db.team.insert({"teamName":"111","creator":"xxx"})複製程式碼
刪(remove):
db.team.remove({"teamName":"111"})複製程式碼
不帶引數將會刪除全部資料。
改(update):
db.team.update({條件},{$set:{新資料}})複製程式碼
例如:修改id為111的team的名字
db.team.update({"_id":"111"},{$set:{"teamName":"999"}})複製程式碼
查詢操作符
聯表查詢
因為MongoDB是非關係型資料庫,而非關係型資料庫有一個特點就是表之間屬於弱關聯。但是我在網上看到一種能夠實現MongoDB關聯查詢的一種方法。
db.product.aggregate([
{
$lookup://關聯
{
from: "orders", // 需要關聯的表
localField: "_id", // product 表需要關聯的鍵
foreignField: "pid", // orders 的 matching key
as: "inventory_docs" // 對應的外來鍵集合的資料
}
},
{
$match: {//篩選資料
price: { $gt:20 }
}
},
{
$project:{//獲取指定欄位
"inventory_docs": 1,
"_id": 0
}
}
])
複製程式碼
$lookup:關聯表
$match:篩選資料
$project:獲取指定欄位