mongodb 内嵌数组关于排序的问题

{"_id" : ObjectId(“54115f9db4daf5a789d799fa”),“arrays” : [{“name” : “a1”,“size” : 1},{“name” : “a2”,“size” : 2},{“name” : “a3”,“size” : 3},{“name” : “a4”,“size” : 4}]}通过size大小排序,有没有办法?

6 回复

看了下mongo有一个insert时做排序,但这样的操作会把压力分摊到每个用户身上。做了下优化,insert数据不排序,仅在需要时,push一个空数组,再排序。db.test.update({“_id” : ObjectId(“54115f9db4daf5a789d799fa”)}, {"$push": {“arrays”: {"$each": [], “$sort”: {“size”: 1}}}})大家有没有更优雅的方式?

为什么一定要保证里面数据的顺序?这样一旦插入的话岂不是要重排,完全可以将排序放在读出数据到使用的这一层逻辑做。

我觉得你现在的解决方案就挺好啊。利用了数据库自身的排序保证。insert 的时候排序也无所谓吧,数据库多不了多少压力。

@haozxuan 对,插入的时候无所谓,因为我在取的时候需要排序后的结果,所以我现在的方案就是对插入无限制,尽在取之前排序返回

@alsotang 数组如果足够大难免就会有压力,还是决定避免遍历操作

@Mirwangsir 尽可能的保证数组长度吧,毕竟对数组加索引的话是对每个元素加,开销代价是很大的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值