【问题标题】: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;