首页 > 解决方案 > 如何获取数组对象以获取值

问题描述

以下文件:

{ 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 fruitnamenutname在数组中

items = [ 'almonds','apple', 'kashu','mongo']

标签: arraysmongodb

解决方案


  • $filternuts迭代数组or的循环fruits,并获取过滤后的文档等于price 100,
  • $map迭代上述过滤文档的循环并仅获取名称字段
  • $concatArarays连接数组nutsfruits
  • $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" }
    }
  }
])

操场


推荐阅读