首页 \ 问答 \ 从mongodb shell安全写入(Safe write from the mongodb shell)

从mongodb shell安全写入(Safe write from the mongodb shell)

如何从javascript立即刷新到磁盘的“安全”写入? 我希望能够从shell和存储的javascript“CRUD”程序中执行此操作。 这只是一个问题:

db.foo.insert({stuff: "yes", meta: "physics"});
db.runCommand( "getlasterror" ) ;

维基对此不清楚。


How do I do a "safe" write that flushes to disk immediately from javascript? I'd like to be able to do this from both the shell and a stored javascript "CRUD" procedure. Is it just a matter of:

db.foo.insert({stuff: "yes", meta: "physics"});
db.runCommand( "getlasterror" ) ;

The wiki is unclear on this.


原文:https://stackoverflow.com/questions/3605427
更新时间:2022-04-15 12:04

最满意答案

您需要更改if语句。 它应该是“===”而不是“==”。 背后有一个很好的解释。

这是您可以使用的最终脚本

function onEdit(e) {
  var sourceSheet = "Raw Data";
  var columnNumberToWatch = 17; // column A = 1, B = 2, etc.
  var valueToWatch = ["Full", "Partial", "Process", "Conditional", "Fail", "Exemption"];
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = e.range;
  var activesheet = range.getSheet();
  var activesheetname = activesheet.getName();
  var row = range.getRow();
  var value = ss.getSheetByName(sourceSheet).getRange(row, columnNumberToWatch).getValue();

  if (activesheetname === sourceSheet && valueToWatch.indexOf(value) >=0) {
    var targetSheet = ss.getSheetByName(value + " Certification");
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    activesheet.getRange(row, 1, 1, activesheet.getLastColumn()).moveTo(targetRange);
    activesheet.deleteRow(row);
      }
}

更新如果不手动编辑单元格,则无法在第二个电子表格上运行脚本。 一旦在第二个电子表格中从第一个电子表格推送该行,它将不会在第二个电子表格中触发onEdit函数。 您可以做的是将其设置为从第一个电子表格中将行分配到正确的表格,如下所示

 //This is part of a script on the first spreadsheet   
 if (valueToWatch.indexOf(value) >=0) {
        var targetSheetName = value + " Certification";
      } else {
        var targetSheetName = "Raw Data";
      }
        var targetSheet = SpreadsheetApp.openById("1bjLKWXUwM6UE4SHz2pbhH3F1E-8GKtvV0870YetOpKo").getSheetByName(targetSheetName);
        var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1,1,activesheet.getLastColumn());
        targetRange.setValues(activesheet.getRange(row, 1, 1, activesheet.getLastColumn()).getValues());
        activesheet.deleteRow(row);

    }

You need to change your if statement. It should be "===" instead of "==". Here is a good explanation behind this.

Here is the final script that you can use

function onEdit(e) {
  var sourceSheet = "Raw Data";
  var columnNumberToWatch = 17; // column A = 1, B = 2, etc.
  var valueToWatch = ["Full", "Partial", "Process", "Conditional", "Fail", "Exemption"];
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = e.range;
  var activesheet = range.getSheet();
  var activesheetname = activesheet.getName();
  var row = range.getRow();
  var value = ss.getSheetByName(sourceSheet).getRange(row, columnNumberToWatch).getValue();

  if (activesheetname === sourceSheet && valueToWatch.indexOf(value) >=0) {
    var targetSheet = ss.getSheetByName(value + " Certification");
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    activesheet.getRange(row, 1, 1, activesheet.getLastColumn()).moveTo(targetRange);
    activesheet.deleteRow(row);
      }
}

Update You cannot make a script run on the second spreadsheet without manually editing a cell. Once the row gets pushed from first spreadsheet in two second, it will not trigger the onEdit function in the second spreadsheet. What you could do is set it to allocate the row to correct sheet from the first spreadsheet with something like this

 //This is part of a script on the first spreadsheet   
 if (valueToWatch.indexOf(value) >=0) {
        var targetSheetName = value + " Certification";
      } else {
        var targetSheetName = "Raw Data";
      }
        var targetSheet = SpreadsheetApp.openById("1bjLKWXUwM6UE4SHz2pbhH3F1E-8GKtvV0870YetOpKo").getSheetByName(targetSheetName);
        var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1,1,activesheet.getLastColumn());
        targetRange.setValues(activesheet.getRange(row, 1, 1, activesheet.getLastColumn()).getValues());
        activesheet.deleteRow(row);

    }

相关问答

更多

相关文章

更多

最新问答

更多
  • python的访问器方法有哪些
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。
  • 响应navi重叠h1和nav上的h1链接不起作用(Responsive navi overlaps h1 and navi links on h1 isn't working)
  • 在C中读取文件:“r”和“a +”标志的不同行为(Reading a File in C: different behavior for “r” and “a+” flags)
  • NFC提供什么样的带宽?(What Kind of Bandwidth does NFC Provide?)
  • 元素上的盒子阴影行为(box-shadow behaviour on elements)
  • Laravel检查是否存在记录(Laravel Checking If a Record Exists)
  • 设置base64图像的大小javascript - angularjs(set size of a base64 image javascript - angularjs)
  • 想学Linux 运维 深圳有哪个培训机构好一点
  • 为什么有时不需要在lambda中捕获一个常量变量?(Why is a const variable sometimes not required to be captured in a lambda?)
  • 在Framework 3.5中使用服务器标签<%=%>设置Visible属性(Set Visible property with server tag <%= %> in Framework 3.5)
  • AdoNetAppender中的log4net连接类型无效(log4net connection type invalid in AdoNetAppender)
  • 错误:发送后无法设置标题。(Error: Can't set headers after they are sent. authentication system)
  • 等待EC2实例重启(Wait for an EC2 instance to reboot)
  • 如何在红宝石中使用正则表达式?(How to do this in regex in ruby?)
  • 使用鼠标在OpenGL GLUT中绘制多边形(Draw a polygon in OpenGL GLUT with mouse)
  • 江民杀毒软件的KSysnon.sys模块是什么东西?
  • 处理器在传递到add_xpath()或add_value()时调用了什么顺序?(What order are processors called when passed into add_xpath() or add_value()?)
  • sp_updatestats是否导致SQL Server 2005中无法访问表?(Does sp_updatestats cause tables to be inaccessible in SQL Server 2005?)
  • 如何创建一个可以与持续运行的服务交互的CLI,类似于MySQL的shell?(How to create a CLI that can interact with a continuously running service, similar to MySQL's shell?)
  • AESGCM解密失败的MAC(AESGCM decryption failing with MAC)
  • SQL查询,其中字段不包含$ x(SQL Query Where Field DOES NOT Contain $x)
  • PerSession与PerCall(PerSession vs. PerCall)
  • C#:有两个构造函数的对象:如何限制哪些属性设置在一起?(C#: Object having two constructors: how to limit which properties are set together?)
  • 平衡一个精灵(Balancing a sprite)
  • n2cms Asp.net在“文件”菜单上给出错误(文件管理器)(n2cms Asp.net give error on Files menu (File Manager))
  • Zurb Foundation 4 - 嵌套网格对齐问题(Zurb Foundation 4 - Nested grid alignment issues)
  • 湖北京山哪里有修平板计算机的