Mongodb对条件子句进行排序

时间:2015-07-07 16:47:00

标签: mongodb sorting

我想做这样的事情: -

db.pub_pairs.find({status:'active'})
            .sort( { if (pcat="abc") then 0 else 1 end })
            .limit(10)

换句话说,我希望它更喜欢字段pcat为"abc"的记录。 我也需要快速,但我可以根据需要添加索引。 有关如何做到这一点的任何建议? 感谢

1 个答案:

答案 0 :(得分:0)

这样做的有效方法是两次查询数据库。对于具有pcat="abc"的文档和具有pcat!="abc"

的文档的一次(如果需要)的文档

(伪代码)的一些东西:

var data = db.pub_pairs.find({status:'active', pcat="abc"})
                       .limit(10)
if (data.length < 10)
  data.concat(db.pub_pairs.find({status:'active', pcat!="abc"})
                          .limit(10-data.length))

为了表现良好,我建议{status: 1, pcat: 1}

上的复合索引

请注意,like any other "find" with MongoDB, you have to be prepared to retrieve the same document twice in the result set,特别是此处,如果pcat字段在执行期间被其他客户端同时修改。