【问题标题】:How to search in array of object and get only matching object from the array in MongoDB如何在对象数组中搜索并从MongoDB中的数组中仅获取匹配的对象
【发布时间】:2021-12-25 06:50:39
【问题描述】:

假设我有这个数据:

[
  {
    "_id": 101,
    "name": "ABC",
    "students": [
      {
        "name": "john",
        "age": 10,
        "city": "CA"
      },
      {
        "name": "danial",
        "age": 15,
        "city": "KA"
      }
    ]
  },
  {
    "_id": 102,
    "name": "DEF",
    "students": [
      {
        "name": "adam",
        "age": 20,
        "city": "NY"
      },
      {
        "name": "johnson",
        "age": 12,
        "city": "CA"
      }
    ]
  }
]

现在我想获取姓名和所在城市为 CA 的学生。

我所做的是:

db.collection.find({
  "students.city": "CA"
},
{
  students: {
    $elemMatch: {
      "city": "CA"
    }
  }
})

然后它返回:

[
  {
    "_id": 101,
    "students": [
      {
        "age": 10,
        "city": "CA",
        "name": "john"
      }
    ]
  },
  {
    "_id": 102,
    "students": [
      {
        "age": 12,
        "city": "CA",
        "name": "johnson"
      }
    ]
  }
]

但名称不见了,即 ABC 和 DEF,如何包含?

现在如果我这样做:

db.collection.find({
  students: {
    $elemMatch: {
      city: "CA"
    }
  }
})

然后它返回名称和学生数组,但它包括那些城市不是 CA 的学生。

[
  {
    "_id": 101,
    "name": "ABC",
    "students": [
      {
        "age": 10,
        "city": "CA",
        "name": "john"
      },
      {
        "age": 15,
        "city": "KA",
        "name": "danial"
      }
    ]
  },
  {
    "_id": 102,
    "name": "DEF",
    "students": [
      {
        "age": 20,
        "city": "NY",
        "name": "adam"
      },
      {
        "age": 12,
        "city": "CA",
        "name": "johnson"
      }
    ]
  }
]

这是游乐场的链接 https://mongoplayground.net/p/NHHu3GahKoK

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您需要将name: 1 添加到投影中。

    db.collection.find({
      "students.city": "CA"
    },
    {
      name: 1,
      students: {
        $elemMatch: {
          "city": "CA"
        }
      }
    })
    

    Sample Mongo Playground

    【讨论】:

    • 谢谢,先生 :) 我忘了包含在投影中
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 2020-10-22
    • 1970-01-01
    • 2017-04-18
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多