📜  在数组 mongodb 中查找对象 (1)

📅  最后修改于: 2023-12-03 15:37:42.867000             🧑  作者: Mango

在数组 MongoDB 中查找对象

在 MongoDB 中,我们经常需要在一个包含多个对象的数组中查找特定的对象。这通常使用$elemMatch运算符来实现。下面的介绍将为程序员提供如何在 MongoDB 中查找数组对象的方法。

查询语法
db.collection.find({ "array_field": { $elemMatch: { "field": "value" } } })
参数说明
  • db.collection: 数据库中集合的名称。
  • array_field: 包含对象的数组字段名称。
  • field: 需要匹配查询的字段名称。
  • value: 字段所匹配的值。
示例

例如,我们有以下的集合users

[
  {
    "_id": ObjectId("61240d33b6c817de37a74a6e"),
    "name": "Alice",
    "age": 25,
    "hobbies": [
      {
        "name": "swimming",
        "level": 3
      },
      {
        "name": "reading",
        "level": 4
      }
    ]
  },
  {
    "_id": ObjectId("61240d33b6c817de37a74a6f"),
    "name": "Bob",
    "age": 30,
    "hobbies": [
      {
        "name": "music",
        "level": 2
      },
      {
        "name": "reading",
        "level": 5
      }
    ]
  }
]

现在我们想要查找所有喜欢阅读的用户。我们可以使用以下查询:

db.users.find({ "hobbies": { $elemMatch: { "name": "reading" } } })

查询结果如下所示:

[
  {
    "_id": ObjectId("61240d33b6c817de37a74a6e"),
    "name": "Alice",
    "age": 25,
    "hobbies": [
      {
        "name": "swimming",
        "level": 3
      },
      {
        "name": "reading",
        "level": 4
      }
    ]
  },
  {
    "_id": ObjectId("61240d33b6c817de37a74a6f"),
    "name": "Bob",
    "age": 30,
    "hobbies": [
      {
        "name": "music",
        "level": 2
      },
      {
        "name": "reading",
        "level": 5
      }
    ]
  }
]
注意事项
  • $elemMatch运算符对数组中的每个元素进行匹配,只有存在匹配的元素时才会返回结果。
  • 运算符也可以用于多个字段的匹配,例如:db.collection.find({ "array_field": { $elemMatch: { "field1": "value1", "field2": "value2" } } })
  • $elemMatch运算符还允许与其他运算符一起使用,例如:db.collection.find({ "array_field": { $elemMatch: { "field": { $gt: 5 } } } })