首页 > 解决方案 > MongoDB:投影匹配查询对应的所有元素

问题描述

假设以下数据格式

{
  _id: "1234",
  tag: "MyTag",
  members: [{
    name: "James", age: 54
  }, {
    name: "John", age: 22
  }, {
    name: "Eric", age: 36
  }],
},
{
  _id: "7896",
  tag: "MyTag2",
  members: [{
    name: "Philip", age: 6
  }, {
    name: "Mark", age: 14
  }, {
    name: "Maya", age: 64
  }],
}

我如何要求所有 30 岁以上的人获得该结果

{
  _id: "1234",
  tag: "MyTag",
  members: [{
    name: "James", age: 54
  }, {
    name: "Eric", age: 36
  }],
},
{
  _id: "7896",
  tag: "MyTag2",
  members: [{
    name: "Maya", age: 64
  }],
}

基本上这个要求

db.MyDB.find({'members':{'$elemMatch':{'age':{'$gt':30}}}}, {'tag:1', 'members.$':1})

但是.$运算符不只返回第一个或每个列表

(我正在使用python api,但我认为这个问题更普遍)

非常感谢!

标签: mongodb

解决方案


位置运算符$$elemMatch投影运算符都只匹配与查询匹配的第一个元素。

如果要获取所有匹配的元素,请使用聚合和$filter数组。


推荐阅读