Javascript 元素重复时MongoDB集合查询/聚合逻辑问题

Javascript 元素重复时MongoDB集合查询/聚合逻辑问题,javascript,mongodb,Javascript,Mongodb,我有一个MongoDB集合,看起来像这样: data = [ {number: 1, status: "ERROR", date: "2020-02-02"}, {number: 1, status: "OK", date: "2020-02-03"}, {number: 2, status: "ERROR", date: "2020-03-02"}, {number: 2,

我有一个MongoDB集合,看起来像这样:

data = [
{number: 1,
status: "ERROR",
date: "2020-02-02"},
{number: 1,
status: "OK",
date: "2020-02-03"},
{number: 2,
status: "ERROR",
date: "2020-03-02"},
{number: 2,
status: "OK",
date: "2020-03-03"},
{number: 3,
status: "OK",
date: "2020-04-02"},
{number: 4,
status: "ERROR",
date: "2020-04-03"}
]
我有一些目标。其中一些包含相同的编号,但状态不同。 我想找到所有元素,但如果数字显示两次或两次以上,我只想找到状态为“OK”的元素

我尝试聚合集合,并通过编号对对象进行分组,然后匹配状态为“OK”的对象,但是我没有得到数组中只显示一次的对象

我尝试过滤阵列:

const b = data.filter((v,i,a)=>a.findIndex(t=>(t.number === v.number))===i)
但如果数等于,则给出第一个值,无论状态如何

如果我尝试实现状态查询,则每个值都会返回:

const b = data.filter((v,i,a)=>a.findIndex(t=>(t.number === v.number) && t.status === "OK")===i)
我卡住了,有人能帮我吗

预期值为:

data = [
{number: 1,
status: "OK",
date: "2020-02-03"},
{number: 2,
status: "OK",
date: "2020-03-03"},
{number: 3,
status: "OK",
date: "2020-04-02"},
{number: 4,
status: "ERROR",
date: "2020-04-03"}
]
你可以试试

  • $sort
    按状态降序排序(这将使OK status的对象位于顶部)
  • $group
    按编号,从组对象中获取第一个文档(这将拾取第一个排序的对象)
  • $replaceWith
    替换根目录中的根对象
  • $sort
    如果要按数字排序,则将按数字升序排序(仅注释)
你可以试试

  • $sort
    按状态降序排序(这将使OK status的对象位于顶部)
  • $group
    按编号,从组对象中获取第一个文档(这将拾取第一个排序的对象)
  • $replaceWith
    替换根目录中的根对象
  • $sort
    如果要按数字排序,则将按数字升序排序(仅注释)

提供的答案中是否有您认为无法解决您问题的内容?如果是,请对答案进行评论,以澄清哪些问题需要解决,哪些问题尚未解决。如果它确实回答了您提出的问题,那么请注意您提出的问题,在提供的答案中,您认为有什么东西没有解决您的问题?如果是,请对答案进行评论,以澄清哪些问题需要解决,哪些问题尚未解决。如果它确实回答了您提出的问题,那么请注意您提出的问题
db.collection.aggregate([
  { $sort: { status: -1 } },
  {
    $group: {
      _id: "$number",
      root: { $first: "$$ROOT" }
    }
  },
  { $replaceWith: "$root" },
  // { $sort: { number 1 } } // (optional)
])