创建、更新、删除文档

1、插入并保存文档


db.collection.insertOne()    Inserts a single document into a collection.
db.collection.insertMany()    db.collection.insertMany() inserts multiple documents into a collection.
db.collection.insert()    db.collection.insert() inserts a single document or multiple documents into a collection.

示例:

db.products.insertOne( { item: "card", qty: 15 } );

批量插入

书中的29的batchInsert方法是错误的,没有这个方法,提供的是insertMany或者insert。

db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)

每一组操作至多包含1000个操作,如果超出了这个限制,mongodb将划分成1000或者更少的组。这个限制未来可能会调整。ordered默认是true的,在一个分片的集合中,会比unordered慢,因为它是按照队列操作的。

示例:

 db.products.insertMany( [
      { _id: 10, item: "large box", qty: 20 },
      { _id: 11, item: "small box", qty: 55 },
      { _id: 12, item: "medium box", qty: 30 }
   ] );

db.products.insert(
   [
     { _id: 20, item: "lamp", qty: 50, type: "desk" },
     { _id: 21, item: "lamp", qty: 20, type: "floor" },
     { _id: 22, item: "bulk", qty: 100 }
   ],
   { ordered: false }
)

NOTE:
默认,mongodb执行的是顺序的插入。如果顺序插入的时候,在一个插入发生错误之后,后续的插入将不再执行;如果是无需的插入,那么发生错误之后,后续的插入还将继续执行。在执行完step1之后,step2执行的结果跟step3是不同的,step3中会插入30,但是step2终不会。

step1:db.foo.insertMany([{"_id":1},{"_id":2},{"_id":3}]);
step2:db.foo.insertMany([{"_id":10},{"_id":2},{"_id":30}]);
step3:db.foo.insertMany([{"_id":10},{"_id":2},{"_id":30}],{ ordered: false});

2、删除文档

书中的remove没有加{},这样写是错误的。
这本书太久了,现在的好多用法都变了,坑爹,只拿这本书的目录学习,以后的所有的内容都按以官方文档为准
官方文档如下:

To remove all documents in a collection, call the remove method with an empty query document {}
db.collection.remove(
   <query>,
   <justOne>
)

示例如下:

db.bios.remove( { } )
db.products.remove( { qty: { $gt: 20 } }, true )

NOTE:
justOne,默认是false,会删除匹配的所有记录,如果只删除一个则设定为true

从一个集合中删除所有的文档,更有效率的方法是用drop()方法删除整个集合,包括索引,然后在重建整个集合和重建索引

3、更新文档

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>
   }
)

update()默认只能更新一个文档,对于整个文档的更新,update操作只能更新一个,multi的选项是针对$操作符multi update only works with $ operators

    原文作者:kyle
    原文地址: https://segmentfault.com/a/1190000008861532
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞