`
xufei0110
  • 浏览: 110611 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

内嵌数组操作

 
阅读更多

 

数组修改器
"$push"和"$pop"只能用于数组.
如果指定的键已存在,"$push"会向已有的数组末尾加入一个元素,如果键不存在,就创建一个新数组.
如:
db.blog.insert(
  {
    "title":"refactor's blog",
    "Content":"refactor's blog test",
    "author":
    {
      "name":"refactor",
      "email":"295240648@163.com"
    }
  }
)
 
向以上文档中,添加一个包含一个数组的"comment"键,还向 comment 数组push一个评论.
这个数组会自动创建,并加入评论:
db.blog.update(
  {"title":"refactor's blog"},
  {
    $push:
    {
      "comments":
      {
        "name":"refactor2",
        "content":"nice"
      }
    }
  }
)
 
还想添加一条评论:
db.blog.update(
  {"title":"refactor's blog"},
  {  www.2cto.com  
    $push:
    {
      "comments":
      {
        "name":"refactor3",
        "content":"good"
      }
    }
  }
)
 
如果一个值不在数组里就把它加进去.可以在查询文档时使用"$ne".
 
使用"$addToSet"
db.users.insert(
  {
    "userName":"refactor",
    "emails":
    [
      "295240648@163.com",
      "295240648@126.com"
    ]
  }
)
 
向emails添加新地址,用"$addToSet"避免重复
db.users.update(
  {"userName":"refactor"},
  {
    "$addToSet":
    {
      "emails":"295240648@163.com"
    }
  }
)
 
这样"295240648@163.com" 不会插入到emails中
db.users.update(  www.2cto.com  
  {"userName":"refactor"},
  {
    "$addToSet":
    {
      "emails":"295240648@qq.com"
    }
  }
)
 
这样"295240648@qq.com" 会插入到emails中 
 
将"$addToSet"和"$each"一起使用,可以添加不同的值.
db.users.update(
  {"userName":"refactor"},
  {
    "$addToSet":
    {
      "emails":
      {
        "$each":
        [
          "295240648@111.com",
          "295240648@112.com",
          "295240648@113.com"
        ]
      }
    }
  }
)

使用"$pop",可以从数组任何一端删除元素.
{$pop:{key:1}}从数组末尾删除一个元素
{$pop:{key:-1}}从数组头部删除一个元素
使用"$pull",可以根据特定条件删除元素,也可以根据位置删除元素
db.users.update(
  {"userName":"refactor"},
  {
    "$pull":
    {
      "emails":"295240648@111.com"
    }
  }
)
 
"$pull"会将所有匹配的部分删掉,对于数组[1,1,2,1]执行pull 1,得到的结果数组是[2]


以上是mongodb的写法 
mongoose的话

更新数组中的元素

TestModel.update({'user.email': 'xxxx@xxx.com'}, 
    {$set: {'user.$.username': '一回'}}, {multi: true},
    function(err,doc) {
    });
 嵌入文档分为两种基本形式,分别为:
//第一种
var user= new  Schema({ 
    email: String,
    username: String
});
new Schema(
    user:[user]
);
//第二种
new Schema({
    user: [{  
        email: String,
        username: String
    }]
});
 

注意,这里第二种嵌入文档的形式虽是这样,但实际编码中这样写存在着问题就是不能更新指定条件的数组成员

 

 

 

追加push
testmodel.update(
    {_id:'1'},{$push:{user:{name:'2',email:'xxx@xxxx.com'}}}
);
 这样写法有个缺陷,只能更新user数组,其他的项目不能同时更新
所以要同时改其他字段的话用下面的写法
testmodel.findOne({_id:'1'},function(err,doc){

    if(doc) {
        doc.user.push(
            name:'sss',
            email:'xxx@xxx.com'
        );
        doc.sex = '?';
        doc.save(function(err,doc){
             // do something
        });
    }

})
 
删除pull
testmodel.update(
    {'user.name':'1'},
    {$pull:{user:{_id:'1'}}},
    function(err,doc) {
        //do something
    }
);
    注意 这个删除的只能用_id做条件

 

分享到:
评论
2 楼 beyond_开阔天空 2014-02-28  
像scheme_menu中的scheme_second_menu怎么插入数据
1 楼 beyond_开阔天空 2014-02-28  
请问一下,像这个子文档中的数组怎么插入、更新、删除

{
   "system_id": ObjectId("530e9dc46aa250cc219e89ed"),
   "scheme_name": "UCAR方案",
   "scheme_introduction": "UCAR",
   "_id": ObjectId("5310004ad5d43e8022d7515c"),
   "scheme_menu": {
     "scheme_menu_id": "1",
     "scheme_second_menu": [
      
    ],
     "scheme_first_menu": [
      
    ]
  }
}

相关推荐

    JavaScript jQuery 中定义数组与操作及jquery数组操作

    JavaScript 和 jQuery 中的数组操作是编程中非常基础且重要的部分,尤其在处理数据集合时。在 JavaScript 中,数组是一种特殊的数据结构,可以存储各种类型的数据,包括整型、字符串、对象等。虽然 JavaScript 不...

    汇编-neon内嵌汇编实现数组相加.zip

    在本主题“汇编-NEON内嵌汇编实现数组相加”中,我们将深入探讨如何利用NEON指令集在汇编程序中高效地执行数组元素的加法运算。 NEON技术提供了高级SIMD(单指令多数据)功能,这使得在同一时钟周期内可以处理多个...

    字符索引矩阵

    查询操作同样简单,通过字符即可获取对应的内嵌数组: ```cpp std::vector<int> values; if (charIndexMatrix.find(query_char) != charIndexMatrix.end()) { values = charIndexMatrix[query_char]; } else { //...

    二进制文件转C语言数组.rar

    这个“二进制文件转C语言数组.rar”压缩包提供了一种方法,将这些二进制数据转换成C语言数组的形式,方便在C语言程序中直接内嵌。下面将详细介绍这一过程以及相关的知识点。 首先,我们要理解二进制文件和C语言数组...

    Linux Shell脚本系列教程(六):数组和关联数组.docx

    2. 使用内嵌"索引-值"列表法定义关联数组:ass_array=([index1]=index1 [index2]=index2) 3. 添加关联数组元素:ass_array[index3]=index3; ass_array[index4]=index4 关联数组元素的操作方法有: 1. 访问关联数组...

    Shell 数组与关联数组详解及实例代码

    关联数组的使用使得在Shell脚本中处理复杂的数据结构成为可能,比如存储和操作具有特定标识符的数据,例如用户名、城市名等。通过索引,我们可以方便地对数据进行查找、修改和删除,极大地提高了编程的灵活性。 在...

    bin2c.exe(Bin2c.exe是一个可将bmp格式图片转换为C代码数组的工具.RAR)

    而在游戏开发中,内嵌图像可以减少资源加载时间,提高游戏启动速度。 6. 安全提示 提到"无毒无害",这是在提醒用户在下载和使用任何网络资源时,都要确保其安全无病毒。尽管Bin2c.exe在这里被描述为安全的,但在...

    jQuery实现合并/追加数组并去除重复项的方法 <font color=red>原创</font>

    在前端开发中,数组操作是不可或缺的一部分,尤其是当我们需要合并两个数组并去除其中的重复项时。在给定的文件中,提到了利用jQuery实现这一需求的方法,下面将详细介绍相关的知识点。 ### jQuery实现数组合并及...

    MATLAB 结构体(下)和结构体数组(上).md

    本篇文档将继续深入探讨 MATLAB 中的结构体及其高级应用,特别是结构体内嵌和结构体数组的概念与操作。 #### 二、结构体内嵌 **1. 概念** 结构体内嵌指的是在一个结构体内部定义另一个结构体。这种方式允许用户...

    C语言内嵌汇编[文].pdf

    C语言内嵌汇编是指在C源代码中直接使用汇编语言,以便实现特定的低级操作或优化性能。虽然不同编译器的实现方式有所不同,但基本原理相似。这里以Borland格式为例,讨论C语言内嵌汇编的两种主要方式:单句格式和模块...

    神奇的perl-最佳Perl入门

    - 数组可以作为另一个数组的元素,形成数组内嵌数组的结构。 #### 哈希和数组的删除 - 使用`delete`方法从哈希中删除键值对。 - 使用`undef`方法从数组中删除元素。 #### 哈希的遍历 - 遍历哈希通常使用`foreach...

    mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)

    9. **数组(ARRAY)**:MongoDB支持数组,可以存储相同或不同类型的多个值,如`{"fruits": ["apple", "banana", "orange"]}`。 理解并熟练掌握这些数据类型对于有效地利用MongoDB进行数据存储和查询至关重要。在设计...

    plsql中的集合3剑客详解

    在PL/SQL中,Oracle提供了三种集合类型,它们分别是联合数组(Associative Array)、内嵌表(Nested Table)和索引表(Index-By Table),这些类型为处理和操作一维数据提供了强大的工具。让我们逐一深入理解这三种...

    迅速确定php多维数组的深度的方法

    在PHP编程中,多维数组是一个数组内嵌套数组的数据结构。对于多维数组的深度,它是指从最外层的数组到最内层的数组之间的层数...对于想要深入学习PHP数组操作和递归概念的开发者来说,理解和掌握这一知识点非常有帮助。

    类应用举例 操作符重载

    这些操作符的重载使得程序员可以用类似于处理数组或标准库容器的方式来操作链表,从而提高代码的可读性和易用性。 整体而言,这些内容展示了类的定义、对象的创建、类与对象之间的关系,以及如何通过操作符重载来...

    PHP对MongoDB[NoSQL]数据库的操作

    •面向文档存储(类JSON数据模式简单而强大)•动态查询•全索引支持,扩展到内部对象和内嵌数组•查询记录分析•快速,就地更新•高效存储二进制大对象 (比如照片和视频)•复制和故障切换支持•Auto-Sharding自动分片...

    js 获取json数组里面数组的长度实例

    在本文中,我们将探讨如何在JavaScript中获取JSON数组内嵌套数组的长度。 首先,我们需要理解JSON的基本结构。JSON数据通常以键值对(key-value pairs)的形式存在,可以包含字符串、数字、布尔值、数组、对象等。...

    C语言集中上机题目[归类].pdf

    通过这些题目,学习者可以深入理解C语言的基本语法、控制结构、数组操作以及字符串处理等核心概念。这些知识点对于软件开发至关重要,因为它们构成了程序设计的基础。熟练掌握这些技能,不仅可以解决上机题目,也能...

    一个牛人的Systemverilog总结.pdf

    非合并数组适合处理字或字节的操作。 2. **动态数组**: - 动态数组在声明时为空,使用`new[]`分配空间,例如`Int dyn[]; Dyn = new[5];`。这允许在运行时根据需要动态调整数组大小。 3. **Modport**: - ...

    C语言知识图谱(xmind原生文件+全245主题+图文代码内嵌)

    本C语言知识图谱为原生xmind文件,可二创,包含8个主题:数组与指针、数据的存储、自定义类型、库函数模拟实现、编译链接原理、转义字符、动态内存管理以及文件操作。 适合人群:C编程基础入门、C语言期末考试复习、...

Global site tag (gtag.js) - Google Analytics