状态返回与安全


应答式写入

在动手学习代码之前,我们先来了解一个概念:应答式写入。在以前的文章中,我们的操作都是非应答式写入,就是在操作完数据库后,它并没有给我们任何的回应和返回值,而是我们自己安慰自己写了一句话(print(‘[update]:The data was updated successfully’);)。这在工作中是不允许的,因为根本不能体现我们修改的结果。
应答式写入就会给我们直接返回结果(报表),结果里边的包含项会很多,这样我们就可以很好的进行程序的控制和安全机制的处理。有点像前端调用后端接口,无论作什么,后端都要给我一些状态字一样。

db.runCommand( )

它是数据库运行命令的执行器,执行命令首选就要使用它,因为它在Shell和驱动程序间提供了一致的接口。(几乎操作数据库的所有操作,都可以使用runCommand来执行)现在我们试着用runCommand来修改数据库,看看结果和直接用db.collections.update有什么不同。

db.workmate.update({sex:1},{$set:{money:1000}},false,true)
var resultMessage=db.runCommand({getLastError:1})
printjson(resultMessage);

上边的代码,我们修改了所有男士的数据,每个人增加了1000元钱(money),然后用db.runCommand()执行,可以看到执行结果在控制台返回了。

{
    "connectionId" : 1,
    "updatedExisting" : true,
    "n" : 2,
    "syncMillis" : 0,
    "writtenTo" : null,
    "err" : null,
    "ok" : 1
}
  • false: 第一句末尾的false是upsert的简写,代表没有此条数据时不增加
  • true: true是multi的简写,代表修改所有
  • getLastError: 1:表示返回功能错误
  • printjson: 表示以json对象的格式输出到控制台

db.listCommands( ):查看所有的Commad命令。
比如我们要查看是否和数据库链接成功了,就可以使用Command命令。

db.runCommand({ping:1})

返回ok:1就代表链接正常。

findAndModify

从名字上就可以看出,findAndModify是查找并修改的意思。配置它可以在修改后给我们返回修改的结果。我们先看下面的代码:

var myModify={
    findAndModify:"workmate",
    query:{name:'jspan'},
    update:{$set:{age:18}},
    new:true    //更新完成,需要查看结果,如果为false不进行查看结果
}
var ResultMessage=db.runCommand(myModify);
printjson(ResultMessage)

findAndModify的性能是没有直接使用db.collections.update的性能好,但是在实际工作中都是使用它,毕竟要商用的程序安全性还是比较重要的。

findAndModify属性值

  • query: 需要查询的条件/文档
  • sort: 进行排序
  • remove: [boolean]是否删除查找到的文档,值填写true,可以删除
  • new: [boolean]返回更新前的文档还是更新后的文档
  • fields: 需要返回的字段
  • upsert: 没有这个值是否增加

文章作者: 技术潘
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 技术潘 !
  目录