標籤:des style blog http color io ar sp 資料
前言:
此文章主要記錄主要的 MongoDB Collection 的 DML操作。
次文章中的 Collection 名字為 yourColl,每一次操作初始包含兩條資料
{ "_id": ObjectId("5438df36309dca34635d4460"), "username": "name1", "mail": "name1@abc.com"},{ "_id": ObjectId("5438df40309dca34635d4461"), "username": "name2", "mail": "[email protected]", "age": 28}
一、C
- db.collection.save()
db.yourColl.save({ username: "mayj", mail: "test@abc.com"})
Note: save 操作時如果 documents 當中包含有 主鍵(_id),去判斷主鍵是否存在,如果存在,則更新原記錄,如果不存在,則插入新記錄。insert 與save 的區別在於如果一個 document 當中包含有主鍵(_id)且存在,則不處理處理,返回錯誤。
二、R
- db.collection.find()
- 查詢所有記錄
db.yourColl.find();
相當於 MySQL 的
Select * from yourColl;
- 查詢 distinct 某列重複的資料
db.yourColl.distinct("username");
相當於 MySQL 的
Select distict name from yourColl;
- 查詢 age=28 的資料
db.yourColl.find({ age: 28,})
相當於 MySQL 的
Select * from yourColl where age = 28;
- 查詢 age >20 的資料
db.yourColl.find({ age: {$gt:20}})
相當於 MySQL 的
Select * from yourColl where age > 20;
- 查詢 age >=20 的資料
db.yourColl.find({ age: {$gte:20}})
相當於 MySQL 的
Select * from yourColl where age >= 20;
- 查詢 age >=20且 age < 30 的資料
db.yourColl.find({ age: {$gte: 20, $lt: 30}})
相當於 MySQL 的
Select * from yourColl where age >= 20 and age < 30;
- 查詢 mail 中包含 abc 的資料
db.yourColl.find({ mail: /abc/i})
相當於 MySQL 的
Select * from yourColl where mail like "%abc%";
- 查詢 username 中以 name 開頭的資料
db.yourColl.find({ mail: /^abc/i})
相當於 MySQL 的
Select * from yourColl where mail like "%^abc%";
- 查詢 username =name1,mail [email protected] 的資料
db.yourColl.find({ username: "name1", mail: "name1@abc.com"})
相當於 MySQL 的
Select * from yourColl where username = "name1" and mail = "name1@abc.com";
- 查詢指定列 username 和 mail 的資料
db.youColl.find({ },{ username: true, mail: 1})
相當於 MySQL 的
Select username, mail from yourColl;
其中 true 可以用1代替。
- 按照 username 升序,mail 降序排列
db.yourColl.find({}).sort({username:1,mail:-1})
相當於 MySQL 的
Select * from yourColl order by username ASC, mail DESC;
- 查詢1-2條資料
db.yourColl.find({}).limit(2).skip(1)
相當於 MySQL 的
Select * from yourColl limit 1,1
查詢 username = name1 或者 username =name2 的資料
db.yourColl.find({ $or:[{username: "name1"}, {username: "name2"}]})
相當於 MySQL 的
Select * from yourColl where username = "name1" or username = "name2";
- 查詢合格記錄數
db.collect1.find({}).count()
相當於 MySQL 的
Select count(*) from yourColl
- db.collection.findOne()
- db.collection.findAndModify()
三、U
- db.collection.update()
- 更新 username = name2 的使用者的 age 為30
db.yourColl.update( { username: "name2" }, { $set: { age: 30 } },
false,
true)
相當於 MySQL 的
Update yourColl set age = 30 where username = "name2";
- 更新 username = name2 的使用者的 age 為 age + 30
db.yourColl.update( { username: "name2" }, { $set: { age: 30 } },
false,
true)
相當於 MySQL 的
Update yourColl set age = age + 30 where username = "name2";
- 更新 username = name2 的使用者的 username = name3 age 為 age + 30
db.yourColl.update( { username: "name2" }, { $set: { age: 30 }, $inc: { username: "name3" } }, false, true)
相當於 MySQL 的
Update yourColl set age = age + 30, username = "name3" where username = "name2";
四、D
五、RUD
- db.collection.findAndModify() & db.collection.runCommond()
db.users.findAndModify({ query: {age: {$gte: 25}}, sort: {age: -1}, update: {$set: {name: ‘a2‘}, $inc: {age: 2}}, remove: true });
db.runCommand({ findandmodify : "users", query: {age: {$gte: 25}}, sort: {age: -1}, update: {$set: {name: ‘a2‘}, $inc: {age: 2}}, remove: true });
參數 詳解 預設值 query 查詢過濾條件 {} sort 如果多個文檔符合查詢過濾條件,將以該參數指定的相片順序選擇出排在首位的對象,該對象將被操作 {} remove 若為true,被選中對象將在返回前被刪除 N/A update 一個 修改器對象 N/A new 若為true,將返回修改後的對象而不是原始對象。在刪除操作中,該參數被忽略。 false
外部資源連結:
MongoDB CRUD Introduction
MongoDB 入門之基礎DML