本篇介紹在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修改一筆資料屬性值的範例。
參考:
沒有留言:
張貼留言