返回的对象具有符合 Mongoose 条件的嵌套值

Posted

技术标签:

【中文标题】返回的对象具有符合 Mongoose 条件的嵌套值【英文标题】:Returned object with nested values that comply condition with 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
  ]

我只想用猫鼬来实现

【问题讨论】:

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

以上是关于返回的对象具有符合 Mongoose 条件的嵌套值的主要内容,如果未能解决你的问题,请参考以下文章

mongoose#populate 在数组内的嵌套对象中返回 null

Mongoose 嵌套对象数组中的唯一值

Mongoose 嵌套对象数组中的唯一值

合并嵌套在数组 mongoose 中的对象内的 $lookup 值

MongoDB Mongoose Schema 嵌套文档结构和关系

Nodejs mongoose根据对象属性选择嵌套数组中的对象