kaisawind's blog
  • 关于
  • 所有帖子

mongodb数组操作(查询) - Wed, Aug 28, 2019

mongodb对数组的操作,对整个文档来说是更新操作,对文档的数组字段有增删改查操作。

  • 1. 概述
  • 2. 查询数组元素
    • 2.1 [数组名].[子元素字段名]
    • 2.2 [数组名] $elemMatch { [子元素字段名] }
  • 3. 多条件查询
    • 3.1 多条件且查询
    • 3.2 多条件或查询

1. 概述

mongodb对数组的操作,对整个文档来说是更新操作,对文档的数组字段有增删改查操作。

2. 查询数组元素

2.1 [数组名].[子元素字段名]

例如:

{
   "_id" : 1,
   "grades" : [
      { "grade" : 80, "mean" : 75, "std" : 6 },
      { "grade" : 85, "mean" : 90, "std" : 4 },
      { "grade" : 85, "mean" : 85, "std" : 6 }
   ]
}
{
   "_id" : 2,
   "grades" : [
      { "grade" : 90, "mean" : 75, "std" : 6 },
      { "grade" : 87, "mean" : 90, "std" : 3 },
      { "grade" : 85, "mean" : 85, "std" : 4 }
   ]
}
  • 以下操作会查询包含grade为80的数据
db.getCollection('test').find({"grades.grade": 80})

变更为

{
    "_id" : 1,
    "grades" : [ 
        {
            "grade" : 80,
            "mean" : 75,
            "std" : 6
        }, 
        {
            "grade" : 85,
            "mean" : 90,
            "std" : 4
        }, 
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 6
        }
    ]
}

2.2 [数组名] $elemMatch { [子元素字段名] }

例如:

{
   "_id" : 1,
   "grades" : [
      { "grade" : 80, "mean" : 75, "std" : 6 },
      { "grade" : 85, "mean" : 90, "std" : 4 },
      { "grade" : 85, "mean" : 85, "std" : 6 }
   ]
}
{
   "_id" : 2,
   "grades" : [
      { "grade" : 90, "mean" : 75, "std" : 6 },
      { "grade" : 87, "mean" : 90, "std" : 3 },
      { "grade" : 85, "mean" : 85, "std" : 4 }
   ]
}
  • 以下操作会查询包含grade为80的数据
db.getCollection('test').find({"grades": {"$elemMatch": {"grade": 80}}})

变更为

{
    "_id" : 1,
    "grades" : [ 
        {
            "grade" : 80,
            "mean" : 75,
            "std" : 6
        }, 
        {
            "grade" : 85,
            "mean" : 90,
            "std" : 4
        }, 
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 6
        }
    ]
}

3. 多条件查询

3.1 多条件且查询

例如:

{
   "_id" : 1,
   "grades" : [
      { "grade" : 80, "mean" : 75, "std" : 6 },
      { "grade" : 85, "mean" : 90, "std" : 4 },
      { "grade" : 85, "mean" : 85, "std" : 6 }
   ]
}
{
   "_id" : 2,
   "grades" : [
      { "grade" : 90, "mean" : 75, "std" : 6 },
      { "grade" : 87, "mean" : 90, "std" : 3 },
      { "grade" : 85, "mean" : 85, "std" : 4 }
   ]
}
  • 以下操作会查询包含grade为80并且mean为75的数据
db.getCollection('test').find({"grades": {"$elemMatch": {"grade": 80, "mean": 75}}})

变更为

{
    "_id" : 1,
    "grades" : [ 
        {
            "grade" : 80,
            "mean" : 75,
            "std" : 6
        }, 
        {
            "grade" : 85,
            "mean" : 90,
            "std" : 4
        }, 
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 6
        }
    ]
}

3.2 多条件或查询

例如:

{
   "_id" : 1,
   "grades" : [
      { "grade" : 80, "mean" : 75, "std" : 6 },
      { "grade" : 85, "mean" : 90, "std" : 4 },
      { "grade" : 85, "mean" : 85, "std" : 6 }
   ]
}
{
   "_id" : 2,
   "grades" : [
      { "grade" : 90, "mean" : 75, "std" : 6 },
      { "grade" : 87, "mean" : 90, "std" : 3 },
      { "grade" : 85, "mean" : 85, "std" : 4 }
   ]
}
  • 以下操作会查询包含grade为80或mean为75的数据
db.getCollection('test').find({"grades.grade": 80, "grades.mean": 75})

变更为

{
    "_id" : 1,
    "grades" : [ 
        {
            "grade" : 80,
            "mean" : 75,
            "std" : 6
        }, 
        {
            "grade" : 85,
            "mean" : 90,
            "std" : 4
        }, 
        {
            "grade" : 85,
            "mean" : 85,
            "std" : 6
        }
    ]
}


辽ICP备2021007608号 | © 2025 | kaisawind

Facebook Twitter GitHub