假设我有以下数据:
articles[{
_id:1,
flag1:true,
date:2016-09-09,
title:"...",
flag2:false
},
{
_id:2,
flag1:true,
date:2016-09-10,
title:"...",
flag2:false
},
{
_id:3,
flag1:false,
date:2016-09-11,
title:"...",
flag2:true
},
{
_id:4,
flag1:false,
date:2016-09-13,
title:"...",
flag2:true
}
]
我想要个别排序[基本上我必须选择两个列表一个带有flag1:true
的排序列表,flag2:true
最终将它们合并到一个列表中]
和flag1:true
记录列在最上面。
我希望按以下顺序获得输出:
[
{
_id:2,
flag1:true,
date:2016-09-10,
title:"...",
flag2:false
},
{
_id:1,
flag1:true,
date:2016-09-09,
title:"...",
flag2:false
},
{
_id:4,
flag1:false,
date:2016-09-13,
title:"...",
flag2:true
},
{
_id:3,
flag1:false,
date:2016-09-11,
title:"...",
flag2:true
}
]
如何在mongoose / mongodb中编写此SQL查询?
select * from articles
where _id in
(select _id from articles where Flag1=true
order by date desc)
or
_id in (select _id from articles where Flag2=true
order by date desc)
我想编写单独的排序,这样我就可以按排序顺序获得第一优先级的基于Flag1
的记录。
答案 0 :(得分:1)
> db.articles.find({ $or: [ { Flag1: true }, { Flag2: true } ] }).sort({date:-1})
但是我不清楚你的要求......但希望这会对你有帮助。
<强>更新强>
Okais ...那么你只需要按这两个字段添加排序: -
db.articles.find({ $or: [ { Flag1: true }, { Flag2: true } ] })
.sort({Flag1:-1,Flag2:-1,date:-1})
答案 1 :(得分:0)
我得到了我的问题的答案。我使用$ function的聚合函数进行排序我使用$ project的虚拟字段。 我们可以使用$ project创建子查询。