可以使用修改器啦修改文档,比如增加、删除文档的键值。使用修改器首先要定位到某个文档, 然后再增加相应的修改选项,需要使用update语句

1.$inc修改器修改文档

> db.users.findOne({'name':'cd'});
{
"_id" : ObjectId("584eafa97629396db95535da"),
"name" : "cd",
"sex" : "M",
"information" : {
"age" : 23,
"address" : "Shanghai"
}
}
> db.users.update({"name": "cd"},
... {"$inc":{"qq": 123456789}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.findOne({'name':'cd'});
{
"_id" : ObjectId("584eafa97629396db95535da"),
"name" : "cd",
"sex" : "M",
"information" : {
"age" : 23,
"address" : "Shanghai"
},
"qq" : 123456789
}
>

命令解释:

db.users.findOne() -->查询某个文档,可以添加具体的参数,只返回一个文档,如上例子查询文档键name的值为cd的该文档

db.users.update() -->更新某个文档,一般带有两个参数,一个参数定位到更新那个文档,另一个参数设置修改内容

{"$inc":{"key" : "value"}}-->修改键key对应的值,若key不存在,则创建key

流程:

1.首先查询name为cd的文档,看文档里面的具体键值

2.使用修改器$inc和更新语句更新集合中的文档

3.再次查询name为cd的文档,和步骤1的查询结果对比,看更新文档是否成功

2.$set修改器修改文档

> db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549695a14618fbeef3bf0f"),
"name" : "scd",
"sex" : "M",
"address" : "上海"
}
> db.users.update( {"name":"scd"},
... {"$set":{"lang": ["中文", "english"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549695a14618fbeef3bf0f"),
"name" : "scd",
"sex" : "M",
"address" : "上海",
"lang" : [
"中文",
"english"
]
}
>

3.$unset修改器,删除文档中的某个键

> db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549885a14618fbeef3bf11"),
"name" : "scd",
"sex" : "M",
"address" : "上海",
"lang" : [
"中文",
"english"
]
}
> db.users.update({"name":"scd"},
... {"$unset":{"sex":"M"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549885a14618fbeef3bf11"),
"name" : "scd",
"address" : "上海",
"lang" : [
"中文",
"english"
]
}
>

操作结果:删除键name值为scd文档的键sex

4.$set和$inc修改器的区别

$inc只能由于修改整型、长整型或双精度浮点型的值

> db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549885a14618fbeef3bf11"),
"name" : "scd",
"address" : "上海",
"lang" : [
"中文",
"english"
]
}
> db.users.update({"name":"scd"},
... {"$inc":{"address": "北京"}});
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 14,
"errmsg" : "Cannot increment with non-numeric argument: {address: \"鍖椾含\"}"
}
})

使用$inc修改键对应的数值为字符串会报错 "writeError"

而使用$set可以修改键对应的值为字符类型的数值

> db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549885a14618fbeef3bf11"),
"name" : "scd",
"address" : "上海",
"lang" : [
"中文",
"english"
]
}
> db.users.update({"name":"scd"},
... {"$set":{"address":"北京"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.findOne("name":"scd");
2016-12-17T09:55:20.213+0800 E QUERY [thread1] SyntaxError: missing ) after argument list @(shell):1:23 > db.users.findOne({"name":"scd"});
{
"_id" : ObjectId("58549885a14618fbeef3bf11"),
"name" : "scd",
"address" : "北京",
"lang" : [
"中文",
"english"
]
}
>

$set修改器可以修改许多类型的数值,如字符串、数组等等

最新文章

  1. 安卓开发error opening trace file: No such file or directory (2)报错原因
  2. lmap
  3. android ProGuard 代码混淆实现
  4. Poj1131-Octal Fractions
  5. 行转列:SQL SERVER PIVOT与用法解释
  6. JAVA 下拉列表和滚动条
  7. Silverlight学习之初始化参数
  8. A Tour of Go Interfaces
  9. iOS-label出现未知边框线的bug
  10. linux文件系统评估之inode
  11. angular.js升序降序过滤器
  12. Java的多态浅谈
  13. MSSQL-最佳实践-Always Encrypted
  14. Python打包项目为EXE程序
  15. POJ 2395 Out of Hay (Kruskal)
  16. 更换 homebrew 国内镜像源
  17. jeecms常用的标签
  18. ZeroClipboard插件——复制到剪切板
  19. make -j [N] --jobs [=N] 增加效率
  20. [smarty] 在smarty模板中使用smarty变量初始化 javascript 变量的问题

热门文章

  1. BZOJ 3992 [SDOI 2015] 序列统计 解题报告
  2. C#虚方法virtual详解
  3. loadrunner 脚本和replaylog中的中文乱码问题(转载)
  4. 用C++ 设计一个不能被继承的类
  5. PSTN
  6. CMD命令窗口复制与粘贴
  7. 修改tomcat的部署名称
  8. Centos 6.5中使用yum安装jdk
  9. SQL中取当前记录的ID----->SCOPE_IDENTITY()
  10. Nhibernate Icreteria 分页查询