【问题标题】:MongoDB Node-Red UpdateMongoDB Node-Red 更新
【发布时间】:2019-12-17 14:21:38
【问题描述】:

我想使用 mongodb3 节点使用 Node-Red 更新我的 MongoDB 中的数据。

这是我在mongo节点之前的函数:

var payload = msg.payload;
var newMsg = {payload: {}};

var doc = {
    $set:{
        temp:23,
        hum:99
    }
};

newMsg.payload.selector= {address: payload.address};
newMsg.payload.document = doc;
newMsg.payload.options = {upsert: true};

return newMsg;

我收到了这个错误:

UnhandledPromiseRejectionWarning: MongoError: document must be a valid JavaScript 对象。

有人知道该怎么做吗?

【问题讨论】:

标签: javascript node.js mongodb node-red


【解决方案1】:

尝试以下方法:

    var newMsg = msg;
    newMsg.collection = '<insert your collection name>';
    newMsg.operation = 'update';
    newMsg.payload = { 
       {},
       $set:{
          "temp":23,
          "hum":99
       }
    };

    return newMsg;

【讨论】:

    【解决方案2】:

    mongodb3 documents 说关于 msg.payload -

    • 要将单个参数传递给操作,请使用 msg.payload 作为您的 参数(例如 {_id: 1243})。

    • 要将多个参数传递给操作,请在 msg.payload 中填充 一个数组。

    • 如果你想传递单个参数 WHICH IS AN ARRAY(例如 使用 InserMany),将您的数组包装在一个外部数组中:msg.payload = [[{_id: 1243}, {_id: 2345}]]

    msg.payload 实际上是操作方法的参数('insert','update',...)。 您可以找到所有方法的参数文档here

    在你的情况下:

    var newMsg = msg;
    newMsg.collection = 'collection-name';
    newMsg.operation = 'update';
    newMsg.payload = [
      {}, // filter
      { // update
        "$set": {
          "field to be updated": "value to be updated",
          ...
        }
      },
      {} // options [optional]
      function() {} // callback [optinal]
    ];
    
    return newMsg;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多