CNode

mongoose sort多条件筛选一直无效,这问题居然无解?

问答
Oowen-hong发布于11 年前最后回复9 年前14 回复9952 浏览0 收藏

在做一个文章置顶的功能,需要对文章时间进行排序,然后对置顶字段在进行排序,坑爹的是mongoose sort的加入第二筛选条件就会有问题:

用上面这样写就是按时间排序,但是top那个字段无效,sort并没有处理top,如果把顺序转换下:

如果这样写把sort的top放在 created签名top进行正确的sort,但是这个时候created却失效了,sort并没有处理created。我是按官网API写的,求各位大神给个解释

查看回复

回复 (14)

J
jerrywu55#1·11 年前

貌似用skip 性能不好

O
owen-hong#2·11 年前
引用 jerrywu55貌似用skip 性能不好

@jerrywu55 哪里不好呢,现在做分页还能有比使用skip更好的吗

J
jerrywu55#3·11 年前
引用 owen-hong@jerrywu55 哪里不好呢,现在做分页还能有比使用skip更好的吗

@owen-hong 根据一个字段来排序,手动计算 $gt 然后只用limit

S
showen#4·11 年前

我是这样写的.sort({ created: -1, top: -1 }) 应该和你那样写效果是一样的 这样的效果是先按照created排序 如果created一样就按top来排序 我猜测你说的‘失效’问题 可能并不是失效 只是因为效果重合了而已

O
owen-hong#5·11 年前
引用 showen我是这样写的<code .sort({ created: 1, top: 1 })</code 应该和你那样写效果是一样的 这样的效果是先按照created排序 如果created一样就按to...

@showen 你这个方法我试过了,也是不行的,他只对先写在前头的那个字段进行了排序,效果重叠是什么意思,求解释

H
huanglong#6·11 年前

会不会是你的 mongoose 的版本问题。

如果实在无法实现,可以用 promise 包装下,排两次序好了:

Article.findAsync()
  .then(function(results) {
    return results.sortAsync({created: -1})
  })
  .then(function(results) {
    return results.sortAsync({top: -1})
  })
  .then(function(results) {
    //
  })
O
owen-hong#7·11 年前
引用 huanglong会不会是你的 mongoose 的版本问题。 如果实在无法实现,可以用 promise 包装下,排两次序好了:

@huanglong 一开始我也怀疑可能是版本问题,后面把他升级到"mongoose": "3.8.23",还是解决不了这个问题,我现在都怀疑是不是mongdb的问题,因为我的mongdb是好久以前建的,误解呀

H
huanglong#8·11 年前
引用 owen-hong@huanglong 一开始我也怀疑可能是版本问题,后面把他升级到"mongoose": "3.8.23",还是解决不了这个问题,我现在都怀疑是不是mongdb的问题,因为我的mongdb是好...

@owen-hong 那么这个值得深入下,你可以本机虚拟机里换个 mongodb, 看到底什么问题导致的,解决方案出来后,应该能帮助到一部分人。

C
chapgaga#9·11 年前

论坛上某人好像封装了个比mongoose更好的包,叫什么?

S
showen#10·11 年前
引用 owen-hong@showen 你这个方法我试过了,也是不行的,他只对先写在前头的那个字段进行了排序,效果重叠是什么意思,求解释

@owen-hong 我说的效果重叠是指:你所有数据里面created没有相同的,所有数据里面top也没有相同的,所有你在排序的时候看到的效果只是第一个的效果,多指标排序是指在前一个指标有相同的情况下再按第二种指标排。

O
owen-hong#12·11 年前
引用 showen@owen hong 我说的效果重叠是指:你所有数据里面created没有相同的,所有数据里面top也没有相同的,所有你在排序的时候看到的效果只是第一个的效果,多指标排序是指在前一个指标有相同...

@showen 确实是和你说的一样,但是我觉的你说的并不全对,就拿cnode的置顶操作字段举例,每个帖子的的发布时间是不同的,置顶字段一旦为true就会把帖子一直置顶

S
showen#13·11 年前
M
mexiQQ#14·9 年前

hi @owen-hong 请问有解决方案了吗

参与回复
登录后即可参与回复。登录