MongoDB中怎么實(shí)現(xiàn)一個(gè)更新函數(shù),很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)公司從2013年開(kāi)始,先為丹東等服務(wù)建站,丹東等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為丹東企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
在MongoDB里面對(duì)于數(shù)據(jù)的更新操作提供了兩類(lèi)函數(shù):save()、update()
如果要修改數(shù)據(jù)最直接的使用函數(shù)就是update()函數(shù),但是這個(gè)函數(shù)的語(yǔ)法要求很麻煩。
語(yǔ)法:db.集合.update(更新條件,新的對(duì)象數(shù)據(jù)(更新操作符),upsert,multl)
● upsert:如果要更新的數(shù)據(jù)不存在,則增加一條新的內(nèi)容(true為增加,false為不增加)。
● multi:表示是否只更新滿足條件的第一行記錄,如果設(shè)置為false,只更新第一條,如果設(shè)置為true全更新。
范例:更新存在的數(shù)據(jù)---將年齡是30歲的薪水更新為8000(此時(shí)會(huì)返回多條數(shù)據(jù))
只更新第一條數(shù)據(jù):
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 1000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢(qián)二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 6400,
"loc" : "北京"
}
> db.emp.update({"age":30},{"$set":{"sal":9999}},false,false);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢(qián)二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7000,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 6400,
"loc" : "北京"
}
所有滿足條件的數(shù)據(jù)都更新:
> db.emp.update({"age":30},{"$set":{"sal":9999}},false,true);
WriteResult({ "nMatched" : 5, "nUpserted" : 0, "nModified" : 4 })
> db.emp.find().skip(0).limit(5).sort({"$natural":1}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "趙一",
"sex" : "男",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be27"),
"name" : "錢(qián)二",
"sex" : "女",
"age" : 22,
"sal" : 5000,
"loc" : "上海"
}
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孫三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
范例:更新不存在的數(shù)據(jù)
> db.emp.update({"age":55},{"$set":{"name":"不存在"}},true,false);
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5991629aca6455d4a46870f6")
})
> db.emp.find({"age":55}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 55, "name" : "不存在" }
此時(shí)相當(dāng)于進(jìn)行了數(shù)據(jù)的創(chuàng)建。
那么除了update()之外,還提供了一個(gè)save()函數(shù),這個(gè)函數(shù)的功能與更新不存在的內(nèi)容相似。
范例:使用save()操作
> db.emp.find({"age":55}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 55, "name" : "不存在" }
> db.emp.save({"_id" : ObjectId("5991629aca6455d4a46870f6"),"age":56});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":56}).pretty();
{ "_id" : ObjectId("5991629aca6455d4a46870f6"), "age" : 56 }
> db.emp.save({"_id" : ObjectId("5991629aca6455d4a46870f6"),"age":56,"name":"stone"});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":56}).pretty();
{
"_id" : ObjectId("5991629aca6455d4a46870f6"),
"age" : 56,
"name" : "stone"
}
使用save,只會(huì)保留在save中出現(xiàn)的字段。如果數(shù)據(jù)不存在,則插入。
> db.emp.save({"age":58,"name":"stone1"});
WriteResult({ "nInserted" : 1 })
> db.emp.find({"age":58}).pretty();
{
"_id" : ObjectId("599164db0184ff511bf02b96"),
"age" : 58,
"name" : "stone1"
}
對(duì)應(yīng)的id數(shù)據(jù)存在了,就是更新操作。要保存的數(shù)據(jù)不存在(不能保存"_id"),就變成了增加操作。
建議使用update,盡量少用save。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。