Mongodb更新嵌套文档

小豪 2013-01-30 03:16:44
RT,弄了很久都没搞出来!!这样格式的数据,怎样可以把idx,inAddr,retAddr都删掉

/* 0 */
{
"_id" : ObjectId("5108993fd9800a0c708cebc0"),
"id" : 1,
"stacks" : [{
"idx" : 1,
"inAddr" : 1,
"retAddr" : 1,
"module" : 1
}, {
"idx" : 2,
"inAddr" : 2,
"retAddr" : 2,
"module" : 2
}]
}

/* 1 */
{
"_id" : ObjectId("51089944d9800a0c708cebc1"),
"id" : 2,
"stacks" : [{
"idx" : 1,
"inAddr" : 1,
"retAddr" : 1,
"module" : 1
}, {
"idx" : 2,
"inAddr" : 2,
"retAddr" : 2,
"module" : 2
}, {
"idx" : 3,
"inAddr" : 3,
"retAddr" : 3,
"module" : 3
}]
}

/* 2 */
{
"_id" : ObjectId("5108994ad9800a0c708cebc2"),
"id" : 3,
"stacks" : [{
"idx" : 1,
"inAddr" : 1,
"retAddr" : 1,
"module" : 1
}, {
"idx" : 2,
"inAddr" : 2,
"retAddr" : 2,
"module" : 2
}, {
"idx" : 3,
"inAddr" : 3,
"retAddr" : 3,
"module" : 3
}]
}

/* 3 */
{
"_id" : ObjectId("51089953d9800a0c708cebc3"),
"id" : 4,
"stacks" : [{
"idx" : 1,
"inAddr" : 1,
"retAddr" : 1,
"module" : 1
}, {
"idx" : 2,
"inAddr" : 2,
"retAddr" : 2,
"module" : 2
}, {
"idx" : 3,
"inAddr" : 3,
"retAddr" : 3,
"module" : 3
}]
}

/* 4 */
{
"_id" : ObjectId("5108995cd9800a0c708cebc4"),
"id" : 5,
"stacks" : [{
"idx" : 1,
"inAddr" : 1,
"retAddr" : 1,
"module" : 1
}, {
"idx" : 2,
"inAddr" : 2,
"retAddr" : 2,
"module" : 2
}, {
"idx" : 3,
"inAddr" : 3,
"retAddr" : 3,
"module" : 3
}]
}

...全文
445 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ai_li7758521 2013-04-07
  • 打赏
  • 举报
回复
var cursor=db.myCollection.find();

while(cursor.hasNext()){

    var y=cursor.next();  
    for(var i=0;i<y.stacks.length;i++){
    
        delete y.stacks[i].idx;
        delete y.stacks[i].inAddr;
        delete y.stacks[i].retAddr;
    }
    
    db.stacks.save(y);
 }
 
 db.myCollection.find()
strike2368168 2013-02-04
  • 打赏
  • 举报
回复
给你个比较笨的方法,主要看你的数组有多长了,{'$unset':{'stacks.0.idx':1}}这个改变中间的数字,直到把所有的都删完,后面的字段名也要改
strike2368168 2013-02-04
  • 打赏
  • 举报
回复
没有找到专门的语法支持这种操作,估计只能检索出来再更新了
《10天掌握MongoDB》2012翻新完整版,大小 4.6 MB,NewSQL 中文社区系列课程。本版本带有 PDF 书签,方便读者朋友阅览。 目录: 第一天:认识MONGODB 从NOSQL说起 NOSQL数据库特点 NOSQL数据库类型 MONGODB简介 数据库、集合、文档命名规范 MONGODB的下载与安装 MONGODB SHELL MONGODB的数据类型 MONGODB的基本数据类型 MONGODB的数组 MONGODB文档嵌套 MONGODB的OBJECTID 结束语 第二天:初识增删改 添加文档 删除文档 更新文档-文档更换1 更新文档-文档替换2 更新文档-UPSERT模式 更新文档-MULTI模式 更新文档-修改器 定位操作符("$")-神马是定位 定位操作符("$")-未知 FINDANDMODIFY-有神马不同 FINDANDMODIFY-返回已更新文档 FINDANDMODIFY-实现自增标识 其他 第三天:学会FIND 认识FIND 子键筛选 复杂查询 查询条件操作符 正则表达式 数组查询 数组查询-$SIZE 数组查询-$SLICE 数组查询-子项定位 数组查询-$ELEMMATCH 游标 $WHERE 排序分页 排序分页-排序比较的顺序 排序分页-分页示例 排序分页-不使用SKIP分页 结束语 第四天:使用索引 创建索引 修改索引 删除索引 唯一索引 地理空间索引-创建1 地理空间索引-创建2 地理空间索引-$NEAR 地理空间索引-$WITHIN(BOX) 地理空间索引-$WITHIN(CENTER) 地理空间索引-$WITHIN(POLYGON) 地理空间索引-球形查找 查询计划 强制使用索引 实战技巧 第五天:聚合操作 聚合操作-COUNT 聚合操作-DISTINCT 聚合操作-GROUP 聚合操作-GROUP完成器 聚合操作-GROUP键函数 聚合操作-MAPREDUCE(简介) 聚合操作-MAPREDUCE(OUTPUT) 第六天:进阶指南 数据库命令-概览 数据库命令-BUILDINFO 数据库命令-COLLSTATS 数据库命令-DROP 数据库命令-DROPINDEXES 数据库命令-GETLASTERROR 数据库命令-ISMASTER 数据库命令-LISTCOMMANDS 数据库命令-LISTDATABASES 数据库命令-PING 数据库命令-RENAMECOLLECTION 数据库命令-REPAREDATABASE 数据库命令-SERVERSTATUS 定容集合 定容集合-自然排序 定容集合-尾部游标 GRIDFS GRDFS-原理 服务器端脚本 服务器端脚本-存储JAVASCRIPT 数据库引用-DBREF 第七天:服务器管理 启动和停止 配置文件 管理界面 安全与认证 备份与恢复 备份与恢复-冷备份 备份与恢复-热备份 备份与恢复-主从复制备份 备份与恢复-修复 第八天:MONGODB复制 主从复制 主从复制-选项 副本集 副本集-特点 副本集-活跃节点选举 读写分离 工作原理-OPLOG 工作原理-同步 复制管理-诊断 复制管理-变更OPLOG容量 复制管理-复制认证 第九天:MONGODB分片 分片与自动分片 片键与片键选择 分片集群的组成部分 创建分片 管理分片 结语 第十天:分享实战经验 对NOSQL的理解 为什么是MONGODB 文档结构设计 索引及查询优化 复制分片及副本集 其他
收集整理的mongodb学习资料,与大家分享。 包括: MongoDB 概念理解.pdf MongoDB_使用手册-中文版.pdf MongoDB使用手册.pdf Mongodb文档 与 php操作.pdf MongoDB应用.pdf =========================================== 常用命令: mongod.exe --dbpath "d:\mongodb\data\db" --directoryperdb --logpath "d:\mongodb\data\logs" --logappend mongo.exe >show dbs >use memo //使用 数据库 memo >show collections //列出当前数据库的collections >db //显示当前数据库 >show users //列出用户 help //更多语法 创建数据库与数据集合: >db >show dbs >use test2 >db.createCollection("t_test"); >use test2 >db >t={name:"hb",addr:"shanghai"}; >db.t_test.find(); >db.t_test.save(t); >db.t_test.find(); >db.t_test.insert({name:"test",addr:"beijing"}); >db.t_test.save({name:"test2",addr:"tianjin",phone:"025-0001"}); 数据查询: db.t_test.find() //select * from t_test db.t_test.find().limit(2) //select * from t_test limit 2 db.t_test.find().sort({x:1}) //select * from t_test order by x asc db.t_test.find().sort({x:1}).skip(2).limit(3) //select * from t_test order by x asc limit 2,3 db.t_test.find({x:10}) //select * from t_test where x = 10 db.t_test.find({x:{$lt:10}}) //select * from t_test where x<10 db.t_test.find({x:{$in:["01","03","10"]}}); // select * from t_test where x in ("01","03","10") db.t_test.find({},{y:true}) //select y from t_test db.t_test.find().count(); db.t_test.find({"address.city":"gz"}) //搜索嵌套文档address中city值为gz的记录 db.t_test.find({likes:"math"}) //搜索数组 db.t_test.ensureIndex({"address.city":1}) //在嵌套文档的字段上建立索引 更新数据: db.t_text.update({},{}) //第一个参数是查询对象,第二个是替代对象,要使用$set db.t_test.update({name:"test"},{$set:{addr:"shenZheng"}}); db.t_test.find(); 数据删除: db.t_test.remove({name:"test2"}); //删除数据 db.t_test.find(); show collections db.t_test.drop(); //删除数据集合(表) use test2 db.dropDatabase(); 索引: db.t_test.ensureIndex({productid:1}) //在productid上建立普通索引 db.t_test.ensureIndex({productid:1,plate:1}) //多字段索引 db.t_test.ensureIndex({productid,1},{unique:true}) //唯一索引 备份与恢复: mongodump.ext --help mongodump.ext -d test -o ../data/backup/test //备份数据库test中所有的数据集合 mongorestore.exe --help mongorestore.exe -d

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧