mongodb增删改查之数组修改器

2,754次阅读
没有评论

共计 1418 个字符,预计需要花费 4 分钟才能阅读完成。

mongodb增删改查之数组修改器

很多情况下字段的数据类型可能是数组,因此有的时候需要我们去修改数组的数据

添加元素

$push 如果数组已经存在则会向数组的最后加入新的数据,如果数组不存在那么会自动创建一个数组表示。

原始数据如下:

{

    “_id” : ObjectId(“5afd34052c63ae1a943bdb27”),

    “name” : “hello”,

    “friends” : 34.0,

    “enemies” : 2.0

}

{

    “_id” : ObjectId(“5afd347c2c63ae1a943bdb29”),

    “name” : “joe”,

    “friends” : 34.0,

    “enemies” : 4.0

}

现在我们要向其中插入一个数组数据,表示兴趣爱好

db.test.update({"name" : "hello"},{"$push":{"favor":"book1"}})
执行完代码之后
{ 
    "_id" : ObjectId("5afd34052c63ae1a943bdb27"), 
    "name" : "hello", 
    "friends" : 34.0, 
    "enemies" : 2.0, 
    "favor" : [
        "book1"
    ]
}
{ 
    "_id" : ObjectId("5afd347c2c63ae1a943bdb29"), 
    "name" : "joe", 
    "friends" : 34.0, 
    "enemies" : 4.0
}

那么问题来了,现在我有很多数据需要向其中导入,不能像上面描述的步骤一个一个导入,那样实在是太慢了,可以使用each配合push导入

db.test.update({"name" : "hello"},{"push":{"favor":{"each":["book2","book3","book4"]}}})
执行完这个代码之后的结果
{ 
    "_id" : ObjectId("5afd34052c63ae1a943bdb27"), 
    "name" : "hello", 
    "friends" : 34.0, 
    "enemies" : 2.0, 
    "favor" : [
        "book1", 
        "book2", 
        "book3", 
        "book4"
    ]
}
{ 
    "_id" : ObjectId("5afd347c2c63ae1a943bdb29"), 
    "name" : "joe", 
    "friends" : 34.0, 
    "enemies" : 4.0
}

有的时候需要控制插入数组的数据的长度,比如我只想这个数组只有长度10,那么我们可以使用$slice来控制

db.test.update({"name" : "hello"},{"push":{"favor":{"each":["1","2","3","4","5","6","7","8","9","10","1"],"$slice":-10}}})
得到的结果如下
{ 
    "_id" : ObjectId("5afd34052c63ae1a943bdb27"), 
    "name" : "hello", 
    "friends" : 34.0, 
    "enemies" : 2.0, 
    "favor" : [
        "2", 
        "3", 
        "4", 
        "5", 
        "6", 
        "7", 
        "8", 
        "9", 
        "10", 
        "1"
    ]
}
{ 
    "_id" : ObjectId("5afd347c2c63ae1a943bdb29"), 
    "name" : "joe", 
    "friends" : 34.0, 
    "enemies" : 4.0
}

在上面你会发现最终结果集是最后的10个有效数据保存到文档,其实还可以使用$sort来实现排序,选取按照某种顺序产生的结果。

正文完
请博主喝杯咖啡吧!
post-qrcode
 
admin
版权声明:本站原创文章,由 admin 2018-05-19发表,共计1418字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码