mongodb数组操作(查询)

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

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

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为80mean为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
        }
    ]
}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wind.kaisa@gmail.com

💰

×

Help us with donation