MongoDB数据插入方法汇总


  • 註冊用戶

    1、概述

    • 在mongodb中有三种方法可以实现新数据的插入,其中常用的插入方法是db.collection.insert();另外,db.collection.save()方法和db.collection.update()方法也能通过upset操作添加文档;upset操作可以更新现有文档也可以插入不存在的新文档。

    2、insert()方法

    • 使用insert()方法向users集合中插入一个文档:
    MongoDB Enterprise > db.users.insert({ID:001,NAME:'Jery',Phone:13562541256});
    WriteResult({ "nInserted" : 1 })
    MongoDB Enterprise > db.users.find()
    { "_id" : ObjectId("5833f4ef90f970074d8b9db8"), "ID" : 1, "NAME" : "Jery", "Phone" : 13562541256 }
    MongoDB Enterprise >
    

    3、save()方法

    • 使用save()方法插入一个文档,下面的示例创建一个新的文档在users集合中:
    MongoDB Enterprise > db.users.save({ID:002,NAME:'Jack',Phone:13562541256});
    WriteResult({ "nInserted" : 1 })
    MongoDB Enterprise > db.users.find()
    { "_id" : ObjectId("5833f4ef90f970074d8b9db8"), "ID" : 1, "NAME" : "Jery", "Phone" : 13562541256 }
    { "_id" : ObjectId("5833f63790f970074d8b9db9"), "ID" : 2, "NAME" : "Jack", "Phone" : 13562541256 }  //使用save()方法新增的一条文档
    MongoDB Enterprise >
    

    4、update()方法

    • 调用update()方法使用upsert标志来新增一个没有匹配查询条件的文档。
    MongoDB Enterprise > db.users.update({ID:003,NAME:'Lucy'},{$set: {Phone:12345678910}},{upsert: true});
    WriteResult({
            "nMatched" : 0,
            "nUpserted" : 1,
            "nModified" : 0,
            "_id" : ObjectId("5833fa340e2db90f979bc1f6")
    })
    MongoDB Enterprise > db.users.find()
    { "_id" : ObjectId("5833f4ef90f970074d8b9db8"), "ID" : 1, "NAME" : "Jery", "Phone" : 13562541256 }
    { "_id" : ObjectId("5833f63790f970074d8b9db9"), "ID" : 2, "NAME" : "Jack", "Phone" : 13562541256 }   //使用save()方法新增的一条文档
    { "_id" : ObjectId("5833fa340e2db90f979bc1f6"), "ID" : 3, "NAME" : "Lucy", "Phone" : 12345678910 }  //使用update()方法新增的一条文档
    MongoDB Enterprise >
    

    4、小结

    • 使用save()方法,如果集合中不存在此文档,则向集合中插入该文档;如果已经存在,save会调用update更新此文档,而insert()则会忽略。

    • save()方法在插入文档时,首先需要遍历集合,然后再一个个插入文档; insert()方法,不需要遍历集合,而是一次性插入,执行效率高。

    • update()方法是用作数据更新操作的,如果存在此文档则更新;如果不存在此文档则把要更新的文档插入到集合中。


  • Lv 1

    補充說明:

    非原地update,性能會很差

    update文檔時,如果新文檔的空間占用大於舊文檔加上它周圍padding的空間,那麼就會放棄原來的位置,把數據拷貝到新空間。 

    參考:《MongoDB——The Definitive Guide 2nd Edition》 page43


  • Lv 1

    @leo 说:

    非原地update

     非原地update <-- 這是什麼意思?


  • Lv 1

    直接抓書上說明:


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待