如何为以下SQL查询编写mongodb查询

时间:2016-09-06 11:54:48

标签: sql-server node.js mongodb mongoose

假设我有以下数据:

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的记录。

2 个答案:

答案 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创建子查询。