Command.push(values: Object): Command
在使用sort参数排序时,意外发现,同样的sort规则,多次执行的数据结果不一致!
一下描述是在开发者工具(stable v1.02.1911180)的云控制平台调试发现的
一、代码:
db.collection('goods')
.doc('c48bd6c8-60f5-4fba-a7de-ddc3407370dd')
.update({
data: {
push: _.push({
each: [],
//position: 2,
//slice:-2,
sort:{
a:-1,
b:-1
},
})
}
})
二、数据集goods(本回只针对 "_id": "c48bd6c8-60f5-4fba-a7de-ddc3407370dd" 进行了测试发现的问题):
[
{
"_id": "c48bd6c8-60f5-4fba-a7de-ddc3407370dd",
"cost": -12,
"discount": 0.95,
"price": 100,
"push": [
{
"a": 30,
"b": 555
},
{
"a": 1300,
"b": 15
},
{
"a": 1112,
"b": 11
},
{
"a": 30,
"b": 5
},
{
"a": 1200,
"b": 1
},
8,
9,
1
],
"style": {
"size": "small"
}
},
{
"_id": "f37a8787-1efa-4cc3-a74e-f4fa50c43c96",
"cost": -50,
"discount": 0.8,
"price": 1600
}
]
三、过程如下:
(1)初始设置:
- sort规则{ a:-1,b:-1 },多次执行相同代码,完成初始化测试准备
- 数据集goods,在sort规则{ a:-1,b:-1 }情况下,多次执行后的截图如下
(2)开始修改规则进行测试
- 第1次修改sort规则: { a:-1,b:-1 } 变更为 { a:-1,b:1 },并第1次执行
- (截图的标注写错了,变化点是 b:-1 --> b:1 )
- 观察数据变化情况: 数据按a:-1的规则排序了,并且在a字段排序的基础上,对b字段也正确排序了 【注意:这只是第1次执行,下面有对比】
- 接上面的sort规则(无变化): { a:-1,b:1 },并第2次执行
- 同样的规则,第2次执行后的数据集与第1次没有变化【猜测:{a:-1,b:1} 组合规则不受执行次数影响?】
- 【注意要修改规则了】修改sort规则: { a:-1,b:1 } 变更为 { a:-1,b:-1 },并第1次执行
- 观察sort规则修改为{a:-1,b:-1},第1次执行后的数据集变化情况【这次符合预期,优先按a:-1排序,其次按b:-1排序】
- 观察sort规则{a:-1,b:-1}(与第1次无变化),第2次执行
- 观察sort规则{a:-1,b:-1}(与第1次无变化),第2次执行后的数据集变化情况【这回按完全b:-1规则排序的,(测试数据有限)a:-1不知道有没有起作用】
- 观察sort规则{a:-1,b:-1}(与第1次无变化),第3次执行
- 观察sort规则{a:-1,b:-1}(与第1次无变化),第3次执行后的数据集变化情况【排序与第2次一样】
四、测试小结
我崩溃了,迷茫了,能不用就先别用这个API参数了,慎用慎用慎用!!!
大胆自信一下,修改sort规则后的第一次排序是正确的,但千万别#¥%……&*(*&脑子短路了不知道什么时候又执行了1次。。。
恳请官方重视以上反馈!
写测试过程实在辛苦,还有个更不好理解的sort规则组合呢
如果你先b后a,{b:-1,a:1}再做上面的测试,
你不崩溃,找我!