zoukankan      html  css  js  c++  java
  • MongoDB学习笔记-创建、更新、删除文档

    创建

        MongoDB中使用insert方法来向集合插入文档,然后保存到MongoDB中。

        db.foo.insert({“hehe”:”呵呵”})

        如果想批量插入的话可以使用下面这种形式:db.foo.insert([{“hehe”:”呵呵”},{“haha”:”哈哈”}])

    • 插入校验

          插入数据时MongoDB只对数据进行最基本的检查-检查文档的基本结构。如果没有“_id”字段,就会自动增加一个,所有文档都必须小于16MB(这个值是MongoDB设计者人为定义的,未来可能会增加)。这样的限制主要是为了防止不良的模式设计,并且保证性能一致。

          由于MongoDB只进行最基本的检查,所以插入非法数据很容易。因此,应该只允许信任的源连接数据库。

    删除

        在MongoDB中可以使用remove()和drop()来删除数据。删除数据是永久性的,不能撤销也不能恢复。

        remove()用来删除文档,有两个重载,如下:

          db.foo.remove():删除整个foo集合中所有文档。但foo不会被删除,也不会删除foo的元数据

          db.foo.remove(搜索条件):删除指定条件的文档

        drop() 用来清空整个集合,它删除文档的速度很快。如下:

          db.foo.drop()

    更新

        update方法用来更新数据库里的文档。它有两个参数,一个是查询文档,用于定位需要更新的目标文档;另一个是修改器(modifier)文档。用于说明要对找到的文档进行哪些修改。查询文档参数最好使用”_id”来匹配。这样可以防止查询条件匹配到多个文档。

    ->var a=db.foo.findOne({"hehe":"呵呵"}); ->delete a.hehe ->a.wuli="wuli韬韬"; ->db.foo.update({"hehe":"呵呵"},a);

    • 部分更新(修改器)

        文档的部分更新是通过更新修改器 (update modifier)来实现的。更新修改器是特殊的键,用来指定复杂的更新操作,比如修改、增加或者删除键,还可以操作数组和内嵌文档

        $set:用来指定一个字段的值。如果这个字段不存在的话,则创建它。

        db.foo.update({“_id”:”123”},{“$set”:{“nb”:”new baby”}});

        如果“nb”这个字段不存在的就会创建一个“nb”字段,反之就会更新“nb”字段值。“$set”甚至可以修改键的类型。如下:

        db.foo.update({“_id”:”123”},{“$set”:{“nb”: [“new bady”,”niubi”]}});

        “$set”还可以用于内嵌文档:

        db.foo.update({“_id”:”123”},{“$set”:{“author.name”:”唐家三少”}})

        $unset:用来删除一个字段,如下:

        db.foo.update({“_id”:”123”,{“$unset”:{“nb”: [“new bady”,”niubi”]}});

        $inc:用来添加已有键的值,如果不存在则会创建一个。它只能用于整型、长整型或浮点型。要是用在其他的数据类型上就会报错。

        db.foo.update({“_id”:”123”},{“$inc”:{“score”:50}})

        如果score键不存在则会创建,并把值设为50。以后每次调用上面的方法,score就会自增50

    • 数据修改器

        $push:向数组末尾添加一个元素,要是这个数组不存在就创建一个数组。

        db.foo.update({“_id”:”123”},{“$push”:{“Age”:12}})

        $each:一次添加多个值。

        db.foo.update({“_id”:”123”},{“$push”:{“Times”:{“$each”: [1,4,3,2,2]}}})

        $slice:限定素组最大长度。它的值必须是负整数。如果添加的值超出限制,那么只会包含最后加入的元素。必须与”$each”使用。

        db.foo.update({“_id”:”123”},{“$push”:{“top10”:{“$each”: [“hehe”,”haha”,”wowo”],”$slice”:-10}})

        $sort:顾名思义,对数组元素进行排序。必须与”$each”使用。

        db.foo.update({“_id”:”123”},{“$push”:{“top10”:{“$each”: [“hehe”,”haha”,”wowo”],”$slice”:-10},”$sort”:{“Times”:-1}})

        $ne/$addToSet: 保证添加到数组内的元素不会重复。

        db.foo.update({“_id”:”123”},{“$ne”,”hehe”},{“$push”:{“nb”:”hehe”}})

        db.foo.update({“_id”:”123”},{“$addToSet”:{“emails”:”hehe@163.com”}})

        $ne $addToSet的区别:$ne不可以和$each一起使用,通过上面的例子就可以看出。$addToSet则可以;$addToSet结合$each可以一次性添加多个元素

        db.foo.update({“_id”:”123”},{“$addToSet”: {“$each”: [“1@163.com”,”2@163.com”]}})

        $pop/$pull: 删除数组元素。“$pop”可以删除数组中头尾的位置元素。有时需要基于特定条件来删除元素,而不仅仅是依据元素的位置,这时可以使用“$pull”来完成。“$pull”会删除所有匹配的文档 。

        db.foo.update({“_id”:”123”},{“$pop”:{“title”:1}})

        db.foo.update({},{“$pull”}:{“_id”:”123”})

    • 数组定位修改器

        若对数组元素之进行操作,有两种方法:通过下标或定位操作符$.

        例如,一个文档的格式如下:

        {

        “_id”:”123”,

        “comments”: [{“comment”:”hehe”,”author”:”zs”}]

        }

    • 使用$来修改author键的值

        db.foo.update({“_id”:”123”},{“$set”:{“comments.$.author”:”ls”}})

    • upsert

        upsert是一种特殊的更新。要是没有找到符合更新条件的文档,就会以要更新的文档为基础创建一个新文档。如果找到了则正常更新。同时,upsert既可以避免竞态问题,又可以缩减代码量。使用方式:设置update方法第三个参数为true就可以了

    • 更新多个文档

        默认情况下,更新只能对符合条件的第一个文档生效。要想更新多个符合条件的文档的话,可以将update方法第四个参数设为true即可。

    写入安全机制

        写入安全(Write Concern)是一种客户端设置,用于控制写入的安全级别。有两种最基本的写入安全机制,应答式写入(acknowledged write)和非应答式写入(unacknowledged write)。应答式写入是默认的方式:数据库会给出相应,告诉你写入操作是否成功执行。非应答式写入不返回任何相应,所以也无法知道写入是否成功。2012年以前,MongoDB默认的写入安全机制是非应答写入。所以用2012之前的MongoDB时记得把写入安全机制显式的设为应答式写入

  • 相关阅读:
    不可或缺 Windows Native (15)
    不可或缺 Windows Native (14)
    不可或缺 Windows Native (13)
    不可或缺 Windows Native (12)
    不可或缺 Windows Native (11)
    不可或缺 Windows Native (10)
    不可或缺 Windows Native (9)
    不可或缺 Windows Native (8)
    不可或缺 Windows Native (7)
    不可或缺 Windows Native (6)
  • 原文地址:https://www.cnblogs.com/Khadron/p/MongoDB_Note_2.html
Copyright © 2011-2022 走看看