arrays - 如何获取数组对象以获取值
问题描述
以下文件:
{ itemid : 101, vegitable : { nuts : [ { nutsid : 'n101', nutname : 'almonds', price :100 }, { nutid : 'f102', nutname : 'kishmish', price :150}],
fruits : [{ frid : 'n101', fname : 'apple',price : 100} }] }
},{
itemid : 102, vegitable : { nuts : [ { nutsid : 'n101', nutname : 'kashu', price :100 }, { nutid : 'f102', nutname : 'draksh', price :150}],
fruits : [{ frid : 'n101', fname : 'mango',price : 100} }] }
}
我想要以下输出精确 100 / -price
fruitname
并nutname
在数组中
items = [ 'almonds','apple', 'kashu','mongo']
解决方案
$filter
nuts
迭代数组or的循环fruits
,并获取过滤后的文档等于price 100
,$map
迭代上述过滤文档的循环并仅获取名称字段$concatArarays
连接数组nuts
和fruits
$unwind
解构vegitable
我们在上面阶段创建的数组$group
通过 null 并构造数组vegitable
db.collection.aggregate([
{
$addFields: {
vegitable: {
$concatArrays: [
{
$map: {
input: {
$filter: {
input: "$vegitable.nuts",
cond: { $eq: ["$$this.price", 100] }
}
},
in: "$$this.nutname"
}
},
{
$map: {
input: {
$filter: {
input: "$vegitable.fruits",
cond: { $eq: ["$$this.price", 100] }
}
},
in: "$$this.fname"
}
}
]
}
}
},
{ $unwind: "$vegitable" },
{
$group: {
_id: null,
items: { $push: "$vegitable" }
}
}
])
推荐阅读
- amazon-web-services - 限制开发者拉取 AWS Amplify 的生产环境
- java - 在 android 的嵌套 Recyclerview 中显示数据
- xml - XSLT 匹配:正则表达式中字符 0 处的语法错误:量词之前没有表达式
- elasticsearch - 在弹性搜索中定义自定义标记器
- c# - 在 Winforms 应用程序中使用 System.Windows.Media API 会导致奇怪的 UI 行为
- python - Working with more than one datetime format in python
- metrics - YOLOv5 中指标的含义
- oracle - 在 oracle 中验证脚本
- javascript - 有没有办法选择与另一个相关的数组对象?
- ruby-on-rails - 如何在 Coffeescript 中导入 js 文件?