【MongoDB学习笔记12】深入MongoDB的更新(update)操作:数组修改
短信预约 -IT技能 免费直播动态提醒
查看一个文档的一个键值comments为一个数组[“test1”,”test2”]:
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test1",
"test2"
]
}
>
一、$push向数组末尾添加元素
> db.post.update({"id":1},{$push:{"comments": "test3"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test1",
"test2",
"test3"
]
}
>
使用$each一次性添加多个值:
> db.post.update({"id":1},{$push:{"comments":{$each:["test4","test5","test6"]}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test1",
"test2",
"test3",
"test4",
"test5",
"test6"
]
}
>
二、用$pop删除数组中的元素
从数组末尾删除一个值:
> db.post.update({"id":1},{$pop:{"comments":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test1",
"test2",
"test3",
"test4",
"test5"
]
}
从数组开头删除一个值:
> db.post.update({"id":1},{$pop:{"comments":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test2",
"test3",
"test4",
"test5"
]
}
>
三、删除数组中一个指定的值:
> db.post.update({"id":1},{$pull:{"comments":"test3"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test2",
"test4",
"test5"
]
}
>
四、基于数组下标位置修改:
> db.post.update({"id":1},{$set:{"comments.1":"test9"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.post.findOne({"id":1})
{
"_id" : ObjectId("54a530c3ff0df3732bac1680"),
"id" : 1,
"name" : "joe",
"age" : 21,
"comments" : [
"test2",
"test9",
"test5"
]
}
>
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341