温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

MongoDB中怎么实现一个更新函数

发布时间:2021-07-16 16:54:54 来源:亿速云 阅读:127 作者:Leah 栏目:关系型数据库

MongoDB中怎么实现一个更新函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。


在MongoDB里面对于数据的更新操作提供了两类函数:save()、update()

如果要修改数据最直接的使用函数就是update()函数,但是这个函数的语法要求很麻烦。
语法:db.集合.update(更新条件,新的对象数据(更新操作符),upsert,multl)
  ● upsert:如果要更新的数据不存在,则增加一条新的内容(true为增加,false为不增加)。
  ● multi:表示是否只更新满足条件的第一行记录,如果设置为false,只更新第一条,如果设置为true全更新。

范例:更新存在的数据---将年龄是30岁的薪水更新为8000(此时会返回多条数据)
只更新第一条数据:
> 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" : "钱二",
        "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" : "钱二",
        "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,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" : "钱二",
        "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" : "北京"
}

范例:更新不存在的数据
> 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" : "不存在" }

此时相当于进行了数据的创建。
那么除了update()之外,还提供了一个save()函数,这个函数的功能与更新不存在的内容相似。

范例:使用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,只会保留在save中出现的字段。如果数据不存在,则插入。

> db.emp.save({"age":58,"name":"stone1"});
WriteResult({ "nInserted" : 1 })
> db.emp.find({"age":58}).pretty();
{
        "_id" : ObjectId("599164db0184ff511bf02b96"),
        "age" : 58,
        "name" : "stone1"
}

对应的id数据存在了,就是更新操作。要保存的数据不存在(不能保存"_id"),就变成了增加操作。
建议使用update,尽量少用save。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI