【问题标题】:Returned object with nested values that comply condition with Mongoose返回的对象具有符合 Mongoose 条件的嵌套值
【发布时间】:2022-01-20 11:03:12
【问题描述】:

我正在从一个集合中查询一个对象,该集合具有一个包含对象数组的键。我希望它返回对象并排除数组中具有“可用:false”的元素。

例如:

{
  name: "Willy's Store",
  city: "Baigorria",
  storeId:"666",
  open: [
    {day: monday, available: true}, 
    {day: tuesday, available:true}, 
    {day:wensday, available: true},
    {day:thursday, available:false}, 
    {day:friday, available:false}
  ]
}

在查询中,预期的结果应该是

{
  name: "Willy's Store",
  city: "Baigorria",
  storeId:"666",
  open: [
    {day: monday, available: true}, 
    {day: tuesday, available:true}, 
    {day:wensday, available: true}
  ]
}

我只想用猫鼬来实现

【问题讨论】:

  • 我认为这是与stackoverflow.com/questions/15117030/… 类似的问题,您可以使用聚合函数来匹配对象“Willy's Store”,然后使用 $unwind 访问数组值(打开)并匹配 @ 987654324@ 然后将它们与 $group 组合在一起。
  • 我已经更新了我的示例,使其更加精确。使用该帖子中提出的聚合,我没有返回“城市”和“storeId”甚至“名称”,只有与“_id”匹配“available:true”条件的开放数组
  • 场景使用unwind和group来放回去,建议试试。
  • 是的,我做到了,它不会带回其余的数据。仅过滤后的数据。

标签: javascript node.js mongodb mongoose


【解决方案1】:

您可以在open 对象上使用filter 数组概念来过滤掉available 天。

    var data = {
    "name": "Willy's Store",
    "open": [{
        "day": "monday",
        available: true
    }, {
        "day": "tuesday",
        available: true
    }, {
        "day": "wensday",
        available: true
    }, {
        "day": "thursday",
        available: false
    }, {
        "day": "friday",
        available: false
    }]
}
data.open = data.open.filter(subData => subData.available)
console.log(data)

【讨论】:

  • 是的,这就是我目前所做的。我相信它可以使用猫鼬来完成,我会找到一种更清洁的方法。谢谢。
  • 太棒了。那我相信@ChrisParry的评论会是一个尝试。
  • 我已经更新了我的示例,使其更加精确。使用该帖子中提出的聚合,我没有返回“城市”和“storeId”甚至“名称”,只有与“_id”匹配“available:true”条件的开放数组
猜你喜欢
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
  • 2022-12-08
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多