返回的对象具有符合 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 中的对象内的 $lookup 值