zoukankan      html  css  js  c++  java
  • 数组修改器 $push $ne ($addToSet $each ) $pop $pull

     $push 向已有数组末尾 增加一个元素,如果数组不存在则创建。

    如:

    给blog 增加评论数组 ,本来没有 comments 数组 ,则创建了 comments 数组。

    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "title" : "My Blog post",
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z")
    }
    > db.foo.update({"title":"My Blog post"},
    ... {$push : {"comments":
    ... {"name":"joe","email":"joe@example.com","content":"nice post."}}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }

    再增加一条评论 ,插入在 comments 数组 末尾。

    > db.foo.update({"title":"My Blog post"},
    ... {$push : {"comments":
    ... {"name":"bob","email":"bob@example.com","content":"good post."}}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }

    $ne 跟 $push 连用

    $ne 表示 数组中不存在 这个条件,才执行 后面的条件 ( 跟 $push 连用表示 不存在条件 则 把 它 插入到 数组末尾)。

    > db.foo.update({"title":"My Blog post"},
    ... {$set:{"authors":["joe","bob"]}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }

     给 authors 键 增加 Richie 用户。

    db.foo.update({"authors":{"$ne":"Richie"}},
    ... {$push : { "authors":"Richie"}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }

     增加成功。

    增加一个重复的 joe 看看

    db.foo.update({"authors":{"$ne":"joe"}},
    ... {$push:{"authors":"joe"}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }
    >

    没有加进去。

    $addToSet 可以实现 跟"$ne"相同的功能。

    加入已经存在的

    db.foo.update({"title":"My Blog post"},
    ... {"$addToSet":{"authors":"joe"}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }

    跟 $ne 一样 没有任何变化

    加入 新作者 Apple

    db.foo.update({"title":"My Blog post"},
    ... {"$addToSet":{"authors":"Apple"}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie",
                    "Apple"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "title" : "My Blog post"
    }

     $addToSet  可以跟  $each 组合使用  (x 完成 $ne 和 $push 组合不能完成的 X)

    一次添加多个 邮件地址

    > db.foo.update({"title":"My Blog post"},
    ... {"$addToSet":
    ... {"emails":{"$each":["joe@php.net","joe@example.com","joe@python.org"]}}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie",
                    "Apple"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "emails" : [
                    "joe@php.net",
                    "joe@example.com",
                    "joe@python.org"
            ],
            "title" : "My Blog post"
    }

    删除数组元素

    $pop  删除 数组中指定位置的元素

    $pull   删除 数组中指定条件的元素,跟位置无关,会删掉所有匹配条件的元素。

    {$pop : { key : 1}} 从数组末尾 删掉一个元素。

    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie",
                    "Apple"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "emails" : [
                    "joe@php.net",
                    "joe@example.com",
                    "joe@python.org"
            ],
            "title" : "My Blog post"
    }
    > db.foo.update({"title":"My Blog post"},
    ... {"$pop":{"emails":1}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie",
                    "Apple"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "emails" : [
                    "joe@php.net",
                    "joe@example.com"
            ],
            "title" : "My Blog post"
    }

     {$pop : { key : -1}}从数组头部删除一个元素。

    > db.foo.update({"title":"My Blog post"},
    ... {"$pop":{"emails":-1}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie",
                    "Apple"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "emails" : [
                    "joe@example.com"
            ],
            "title" : "My Blog post"
    }

    $pull 删除指定条件的字段,删掉 authors 中的  Apple

    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie",
                    "Apple"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "emails" : [
                    "joe@example.com"
            ],
            "title" : "My Blog post"
    }
    > db.foo.update({"title":"My Blog post"},
    ... {"$pull":{"authors":"Apple"}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdee24389834bfb0bd267a9"),
            "authors" : [
                    "joe",
                    "bob",
                    "Richie"
            ],
            "comments" : [
                    {
                            "name" : "joe",
                            "email" : "joe@example.com",
                            "content" : "nice post."
                    },
                    {
                            "name" : "bob",
                            "email" : "bob@example.com",
                            "content" : "good post."
                    }
            ],
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "emails" : [
                    "joe@example.com"
            ],
            "title" : "My Blog post"
    }

     $pull 删除所有匹配条件的元素

    > db.foo.update({"title":"My Blog post"},
    ... {"$set":{"test":[1,1,2,1]}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdefcb789834bfb0bd267ac"),
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "test" : [
                    1,
                    1,
                    2,
                    1
            ],
            "title" : "My Blog post"
    }
    > db.foo.update({"title":"My Blog post"},
    ... {"$pull":{"test":1}})
    > db.foo.findOne()
    {
            "_id" : ObjectId("4fdefcb789834bfb0bd267ac"),
            "content" : "Here's my blog post.",
            "date" : ISODate("2012-06-16T12:19:25.163Z"),
            "test" : [
                    2
            ],
            "title" : "My Blog post"
    }
    >


     

  • 相关阅读:
    WPF 程序 处理未捕获异常,和程序莫名终止说拜拜
    CSS块级元素和行内元素
    Memcache安全配置
    ASP.NET MVC3默认提供了11种ActionResult的实现
    css position: absolute、relative详解
    用Redis实现Session功能
    编写 WPF DataGrid 列模板,实现更好的用户体验
    CSS3去除手机浏览器button点击出现的高亮框
    OpenCV 视频处理框架
    DataGridView绑定数据源
  • 原文地址:https://www.cnblogs.com/anan/p/2553754.html
Copyright © 2011-2022 走看看