共计 1418 个字符,预计需要花费 4 分钟才能阅读完成。
很多情况下字段的数据类型可能是数组,因此有的时候需要我们去修改数组的数据
添加元素
$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来实现排序,选取按照某种顺序产生的结果。
正文完
请博主喝杯咖啡吧!