MongoDB笔记三之基本数据操作

数组操作

添加元素

如果数组已经存在,”$push” 会向已有的数组末尾加入一个元素,要是没有就
创建一个新的数组。例如,假设要存储博客文章,要添加一个用于保存数组的
“comments”(评论)键。可以向还不存在的”comments” 数组添加一条评论,这
个数组会被自动创建,并加入一条评论

db.blog.findOne()
{
        "_id" : ObjectId("55a41686b8c3e684af6d4ce1"),
        "title" : "tets",
        "content" : "asfasf",
        "comments" : [
                {
                        "id" : 1
                }
        ]
}
> db.blog.update({
  "_id":ObjectId("55a41686b8c3e684af6d4ce1")},{
  "$push":{
  "comments":{
  "id":2}}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.findOne()
{
        "_id" : ObjectId("55a41686b8c3e684af6d4ce1"),
        "title" : "tets",
        "content" : "asfasf",
        "comments" : [
                {
                        "id" : 1
                },
                {
                        "id" : 2
                }
        ]
}

这是一种比较简单的” push使使 each" 子操作符,可以通过一次"$push” 操作添加多个值。

> db.stock.ticker.update({
  "_id" : "GOOG"},
... {
  "$push" : {
  "hourly" : {
  "$each" : [562.776, 562.790, 559.123]}}})

这样就可以将三个新元素添加到数组中。如果指定的数组中只含有一个元素,那这
个操作就等同于没有使用” each"" push” 操作。

db.blog.update({
  "_id":ObjectId("55a41686b8c3e684af6d4ce1")},{
  "$push":{
  "comments":{
  "$each":[ {
  "id":4},{
  "id":6}] }}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.findOne()
{
        "_id" : ObjectId("55a41686b8c3e684af6d4ce1"),
        "title" : "tets",
        "content" : "asfasf",
        "comments" : [
                {
                        "id" : 1
                },
                {
                        "id" : 2
                },
                {
                        "id" : 4
                },
                {
                        "id" : 6
                }
        ]
}

如果希望数组的最大长度是固定的,那么可以将” slice"" push” 组合在一起
使用,这样就可以保证数组不会超出设定好的最大长度,这实际上就得到了一个最
多包含N 个元素的数组:
>

 db.movies.find({
  "genre" : "horror"},
... {
  "$push" : {
  "top10" : {
... "$each" : ["Nightmare on Elm Street", "Saw"],
... "$slice" : -10}}})

这个例子会限制数组只包含最后加入的10 个元素。” slice10 push” 之后),那么所有元素都会保留。如果数组
的元素数量大于10,那么只有最后10 个元素会保留。因此,”$slice” 可以用来在
文档中创建一个队列。

db.blog.update({
  "_id":ObjectId("55a41686b8c3e684af6d4ce1")},{
  "$push":{
  "comments":{
  "$each":[ {
  "id":9},{
  "id":10}],"$slice":-5 }}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.findOne()
{
        "_id" : ObjectId("55a41686b8c3e684af6d4ce1"),
        "title" : "tets",
        "content" : "asfasf",
        "comments" : [
                {
                        "id" : 8
                },
                {
                        "id" : 9
                },
                {
                        "id" : 10
                },
                {
                        "id" : 9
                },
                {
                        "id" : 10
                }
        ]
}

将数组作为数据集使用

> db.users.update({
  "_id":ObjectId("55a419cba1d8ea791f22049f")},{
  "$addToSet":{
  "emails":"test@jd.com"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("55a413e2b36f8fea7006908b"), "name" : "test", "age" : 33, "sex" : "male", "favorbook" : [ "war", "paech" ] }
{ "_id" : ObjectId("55a4141c8e810e49151c675a"), "name" : "test", "age" : 33, "sex" : "male" }
{ "_id" : ObjectId("55a414238e810e49151c675b"), "name" : "test1", "age" : 33, "sex" : "male" }
{ "_id" : ObjectId("55a419cba1d8ea791f22049f"), "name" : "jing", "emails" : [ "test@jd.com" ] }
> db.users.update({
  "_id":ObjectId("55a419cba1d8ea791f22049f")},{
  "$addToSet":{
  "emails":"test@jd.com"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
> db.users.find()
{ "_id" : ObjectId("55a413e2b36f8fea7006908b"), "name" : "test", "age" : 33, "sex" : "male", "favorbook" : [ "war", "paech" ] }
{ "_id" : ObjectId("55a4141c8e810e49151c675a"), "name" : "test", "age" : 33, "sex" : "male" }
{ "_id" : ObjectId("55a414238e810e49151c675b"), "name" : "test1", "age" : 33, "sex" : "male" }
{ "_id" : ObjectId("55a419cba1d8ea791f22049f"), "name" : "jing", "emails" : [ "test@jd.com" ] }

删除元素
----

有几个从数组中删除元素的方法。若是把数组看成队列或者栈,可以用” pop$pop:key:1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值