`
xufei0110
  • 浏览: 109197 次
  • 性别: 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": [
      
    ]
  }
}

相关推荐

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

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

    Perl5语言全教程

    2、内嵌模式选项 3、肯定的和否定的预见匹配 4、模式注释 第七章 控制结构 一、条件判断 二、循环: 1、while循环 2、until循环 3、for循环 4、针对列表(数组)每个元素的foreach循环 5、do循环 6、循环...

    perl 程序开发教程

    2、内嵌模式选项 3、肯定的和否定的预见匹配 4、模式注释 第七章 控制结构 一、条件判断 二、循环: 1、while循环 2、until循环 3、for循环 4、针对列表(数组)每个元素的foreach循环 5、do循环 6、循环...

    《面向对象c++》课程设计

    StuCources是Cources类型的内嵌对象数组; (3)从people中派生student类,添加属性:班号 Char classNo[7]; (4)从people中派生出Teacher类,添加属性:职务 char principalship[11]、部门char department...

    嵌入式系统编程修炼之道

    3.数组vs.动态申请 4.关键字const 5.关键字volatile 6.CPU字长与存储器位宽不一致处理 总结 C语言嵌入式系统编程修炼之道——屏幕操作篇 1.汉字处理 2.系统时间显示 3.动画显示 4.菜单操作 5.模拟MessageBox函数 ...

    MongoDB基本操作指南

    图1 MongoDB是一个Schema-free的文档数据库图2是一个例子,作品和评论可以设计为一个collection,评论作为子文档内嵌在art的comments属性中,评论的回复则作为comment子文档的子文档内嵌于replies属性。按照这种设计...

    高可用的MongoDB集群详解

    形式的标记,可轻易查询文档中内嵌的对象及数组。3.完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。4.查询监视:Mongo包含一个监控工具用于分析数据库操作性能...

    C#简单操作MongoDB的步骤全纪录

    前言 MongoDB是一款由C++编写的高性能、开源、无模式的常用非关系型数据库产品,...查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 3)完整的索引支持,包括文档内嵌对象及数组。MongoDB的查询优

    Python-零基础入门 学习套件

    006Pyhon之常用操作符 007了不起的分支和循环 008了不起的分支和循环2 009了不起的分支和循环3 010列表:一个打了激素的数组 011列表:一个打了激素的数组2 012列表:一个打了激素的数组3 013元组:戴上了枷锁的列表...

    mongodb-win32-x86_64-2008plus-ssl-v3.4-latest-signed.msi

    查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。 MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。 Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合...

    快学 scala 中文版 带完整目录

    第3章 数组相关操作 A1 39 3.1 定长数组 39 3.2 变长数组:数组缓冲 40 3.3 遍历数组和数组缓冲 41 3.4 数组转换 42 3.5 常用算法 44 3.6 解读Scaladoc 45 3.7 多维数组 47 3.8 与Java的互操作 48 练习 49 ...

    深入云计算 MongoDB管理与开发实战详解pdf.part1

    2.6.2 使用Shell对MongoDB的基本操作 2.6.3 使用Shell的诀窍 2.6.4 特殊的集合名 2.7 本章小结 第3章 文档的增加、修改及删除 3.1 插入并保存文档 3.1.1 插入的原理和作用 3.1.2 批量插入 3.2 ...

    深入云计算 MongoDB管理与开发实战详解pdf.part2

    2.6.2 使用Shell对MongoDB的基本操作 2.6.3 使用Shell的诀窍 2.6.4 特殊的集合名 2.7 本章小结 第3章 文档的增加、修改及删除 3.1 插入并保存文档 3.1.1 插入的原理和作用 3.1.2 批量插入 3.2 ...

    Linux高级bash编程

    使用export命令传递一个变量到一个内嵌awk的脚本中 11-19. 使用getopts命令来读取传递给脚本的选项/参数. 11-20. "Including"一个数据文件 11-21. 一个没什么用的,source自身的脚本 11-22. exec的效果 11-23. 一个...

    Advanced Bash-Scripting Guide <>

    26. 数组 27. /dev 和 /proc 27.1. /dev 27.2. /proc 28. 关于Zeros 和Nulls 29. 调试 30. 选项 31. Gotchas 32. 脚本编程风格 32.1. 非官方的Shell 脚本风格 33. 杂项 33.1. 交互式和非交互式的shells 和脚本 33.2....

    MongoDB教程之查询操作实例

    主要介绍了MongoDB教程之查询操作实例,本文讲解了基本查询、查询条件、null数据类型的查询、正则查询、数组数据查询、内嵌文档查询等数据查询技巧,需要的朋友可以参考下

    MongoDB入门教程之细说MongoDB数据库的增删查改操作

    看过上一篇,相信大家都会知道如何开启mongodb了,这篇就细说下其中的增删查改,首先当我们用上一篇同样的方式打开mongodb,突然 傻眼了,擦,竟然开启不了...可能是“字符串”,可能是“数组”,又有可能是内嵌的一个J

    思库教育PHP零基础培训+进阶课程+PHP项目开发实战 21G PHP零基础学习视频教程.txt

    │ │ ├[思库教育]第31集 数组操作..avi │ │ ├[思库教育]第32集 数组操作.avi │ │ └[思库教育]第33集运算符.avi │ ├ │ │ ├[思库教育]第34集 mysql数据库认识.avi │ │ ├[思库教育]第35集 mysql数据库...

Global site tag (gtag.js) - Google Analytics