平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Mongodb UPDATE采用$sort将数组重新排序的示例代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
实际处理时,本文继续探讨对文档数组类型字段进行更新。能够思考平时是否遇到这样的需求。数据插入数组字段后,需对数组字段进行排序。比如找出昨天温度最高的几个城市,或者降水量最多的几个城市。或者成绩最高的几个同学。这里都需采用到排序。Mongodb在$push操作中,提供了$sort数据修饰符,允许用户向数组插入元素后,对数组进行排序。
结合项目来看,$sort方法在$push操作过程中,修改数组元素的排序。$sort方法,必须和$each共同采用。mongodb允许用户传递一个空的数组给$each方法,保证用户无须向数组中插入元素也能够将数组进行排序。$sort方法,按照下面的形式来采用。
{
$push: {
<field>: {
$each: [<value1>, <value2>, ...],
$sort: <sort specification>
}
}
}实际处理时,对于sort specification, 当对非文档数组进行排序,或对整个文档作为整体进行排序时,正序能够指定1, 倒序能够指定为-1.当对文档字段进行排序时,指定要排序的字段和排列顺序。不需添加数组字段的字段名称。
向students集合中插入数据,其中quzzes是文档数组类型字段。
db.students.insertOne(
{
_id:1,
quzzes: [
{id:1, score:6},
{id:2, score:9}
]
}
)
实际处理时,构建更新语句,要求向quzzes插入数组元素,同时按照score正序进行排序。
db.students.updateOne(
{_id:1},
{
$push: {
quzzes: {
$each: [
{id:3, score:8},
{id:4, score:7},
{id:5, score:6}
],
$sort: {score:1}
}
}
}
)
查看数据更新结果
db.students.find().pretty();
[
{
"_id": 1,
"quzzes": [
{
"id": 1,
"score": 6
},
{
"id": 5,
"score": 6
},
{
"id": 4,
"score": 7
},
{
"id": 3,
"score": 8
},
{
"id": 2,
"score": 9
}
]
}
]
向students集合插入数据。其中test字段是数值类型的数组。
db.students.insertOne({
_id:2,
tests: [
89,70,89, 50
]
})更新插入的数据, 要求插入新数据40, 60同时对数组按照正序进行排序。
db.students.updateOne({
_id:2
},{
$push: {
tests: {
$each: [40, 60],
$sort: 1
}
}
})查看数据更新结果
db.students.find()
{
"_id": 2,
"tests": [
40,
50,
60,
70,
89,
89
]
}
向students集合插入数据,其中tests是数值类型的数组
db.students.insertOne({
_id:3, tests: [89, 70, 100, 20]
})修改新插入的文档,要求将tests字段按照倒序排序。
db.students.updateOne({
_id:3
},{
$push: {
tests: {
$each: [],
$sort: -1
}
}
})查看更新后的结果
{
"_id": 3,
"tests": [
100,
89,
70,
20
]
}
从实现思路看,以上就是Mongodb UPDATE采用$sort将数组重新排序的示例的详细内容,更多关于Mongodb $sort数组重新排序的资料请关注脚本之家其它相关文章!