Mongodb的数据插入,更新,删除

更新修改常用操作:

  1. db.collection_name.insert({data})
  2. db.collection_name.update({查询器},{修改器},[存在则修改,不存在则插入,布尔类型][,是否批量修改,布尔类型])
  3. db.collection_name.save({_id:ObjectId(),new_data})
  4. db.collection_name.remove({data})
  • $set:指定一个键值对,如果存在键就进行修改不存在则进行添加
  • $unset:删除指定的键值对
  • $inc:用来专门增加或减少的,键值必须是数字
  • upsert:一种特殊的更新,要是没有文当符合更新条件,就会以这个条件和更新文档为基础创建一个新的文档。
  • save:save是一种shell函数,可以在文档不存在时插入,存在时更新
// 切换数据库
use test

// 单个文档插入
post = {"title":"My First Post","content":"hello word!","date":new Date()}
db.test.insert(post)
WriteResult({ "nInserted" : 1 })

// 添加键值对,为post字段添加comments数组
post.comments = []
db.test.update({"title":"My First Post"},post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

// 更新单个键值对的value值
// 相当于sql的update from test set name="xiaohaong" where name="zhangsan" limit 1;
db.test.update({name:"zhangsan"},{$set:{name:"xiaohong"}});

// 批量更新字段
db.getCollection('test').find({"title":"My First Post"}).forEach(
function(item){db.getCollection('test').update({"_id":item._id},{$set:{"content":"Hello Word!!!"}})}
)

// 批量更新所有符合条件的键值对的value值
db.test.find({"type":1})
{ "_id" : ObjectId("61a47cdc7f7e45efaa13b243"), "type" : 1, "friut" : "apple" }
{ "_id" : ObjectId("61a47ceb7f7e45efaa13b244"), "type" : 1, "friut" : "banana" }
{ "_id" : ObjectId("61a47cfd7f7e45efaa13b245"), "type" : 1, "friut" : "pear" }

// 相当于SQL:update from test set type=2 where type=2;
// 第三个参数false,是控制判断是插入还是更新,第四个参数是控制是否批量进行更新
db.test.update({"type":1},{$set:{"type":2}},false,true)

// save插入或更新数据,主键存在则更新,不存在则插入
db.test.save(
{
	"_id" : ObjectId("619b2f70e1d7962d1ec64fe6"), "title":"My First Post","content":"first data","date":new Date()
}
)

// 删除集合中的所有文档
db.test.remove()
 
// 删除指定文档
db.test.remove({"title":"My First Post"}) 

// 删除指定的键值对
db.test.update({"title":"My First Post"},{$unset:{"content":1}})

数组的常用操作

  1. $push:向文档数组中添加元素,如果没有该数组,则自动添加数组
  2. $addToSet:与$push功能相同,但是addToSet把数组看作一个set,如果数组中存在相同的元素,则不会插入
  3. $addToSet和$each组合起来可以一次添加多个不同的值
  4. $pop:与$push相对,用于删除数组的元素
  5. $pull:用于删除指定元素,会将所有匹配的部分删掉
// 添加email数组
db.test.update({"title" : "My First Post"},{$push:{'email':'[email protected]'}},false,true)
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

// 查看插入信息
db.test.find()
{ "_id" : ObjectId("619b2f70e1d7962d1ec64fe6"), "title" : "My First Post", "date" : ISODate("2021-11-29T06:41:40.734Z"), "email" : [ "[email protected]" ] }

// 利用addToSet方式插入
db.test.update({"title" : "My First Post"},{$addToSet:{'email':'[email protected]'}},false,true)
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 0 })

// addToSet方式与each组合一次添加多个的值
db.test.update({"title" : "My First Post"},{$addToSet:{'email':{$each:["[email protected]","[email protected]","[email protected]"]}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

// 利用pop进行删除,key=1表示从尾部开始删除,key=-1表示从头部开始删除,类似队列的出栈
db.test.update({"title" : "My First Post"},{"$pop":{"email":1}})

// 删除指定元素
db.test.update({"title" : "My First Post"},{"$pull":{"email":"[email protected]"}})

ps:

  • remove删除集合所有文档时并不影响索引,当有新文档插入时还会再生的
  • 查询内层文档键,更新外层文档键

猜你喜欢

转载自blog.csdn.net/weixin_44375561/article/details/121611019