本篇介紹在MongoDB修改Collection中單一筆document資料的語法範例。
在MongoDB建立資料請參考MongoDB 使用mongo shell新增多筆資料。
在members collection建立一些資料如下:
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b3"), "name" : "王大明", "age" : 26 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b4"), "name" : "黃小玉", "age" : 19 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b5"), "name" : "李小芳", "age" : 23 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339b9"), "name" : "陳大樹", "age" : 29, "level" : 19 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339ba"), "name" : "林大為", "age" : 32, "level" : 22 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339bb"), "name" : "蔡小芬", "age" : 16, "level" : 25 }
MongoDB修改document資料時,須搭配Update Operators一起使用,例如$set。
使用db.collection.updateOne()修改單一筆document資料。collection為被修改document的Collection名稱,本範例為members。
db.collection.updateOne()的第一個參數為<filter>,第二個參數為<update>。
<filter>為查找修改對象的條件,用法同查詢語法;
<update>為要套用的修改,搭配update operators使用。
例如把age = 29的document的level修改為21。
> db.members.updateOne(
{ age : { $eq: 29 } },
{ $set: { level: 21} }
)
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
用db.collection.find()查看結果,該筆document的level確實由原本的19被修改為21。
> db.members.find( { age : { $eq: 29 } } )
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339b9"), "name" : "陳大樹", "age" : 29, "level" : 21 }
如果<filter>的查找結果是多筆,則只有第一筆的資料會被修改。
例如把age < 30的documents的level修改為10。
> db.members.updateOne( { age : { $lt: 30 } }, { $set: { level: 10 } } )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
查看結果如下,只有第一筆document(age: 26)的level被修改為10,而此筆document原本並沒有level屬性。
> db.members.find( { age: { $lt: 30 } } )
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b3"), "name" : "王大明", "age" : 26, "level" : 10 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b4"), "name" : "黃小玉", "age" : 19 }
{ "_id" : ObjectId("5d4e5fb28ef1d4239e23e5b5"), "name" : "李小芳", "age" : 23 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339b9"), "name" : "陳大樹", "age" : 29, "level" : 21 }
{ "_id" : ObjectId("5d4ee49aa2f6bbafe52339bb"), "name" : "蔡小芬", "age" : 16, "level" : 25 }
以上即為在MongoDB修改一筆資料屬性值的範例。
參考:
沒有留言:
張貼留言