Node-Red的新手,只是尝试了解使用node.send({payload:result})
异步发送消息的概念
我试图根据node.send()函数返回的结果对upsert执行MongoDB更新,但是不幸的是,我只看到一个文档插入,而不是20个文档。
我的异步函数A1如下:
msg.payload.forEach(function(myRec) {
node.send({payload:myRec});
});
return null;
使用调试节点,这将返回所有20个文档。
我与此异步功能A1连接的其他功能正在用于执行upsert,即
功能A2:
msg1 = {};
msg1.operation="updateOne";
msg1.collection="myCollection";
msg.myrec = msg.payload; // assuming from A1 node.send payload
msg1.payload= [
{ "myNm": "aaa"},
{
$set: {
"nm": msg.myrec.nm,
"addressdets": msg.myrec.addressdets
}
},
{upsert: true}
];
node.send({payload:msg1});
return null;
然后将功能A2传递/连接到我的流程中的MongoDB节点。
基于上述情况,该过程仅插入一个文档,而不是整个20。
关于我所缺少的任何想法。
答案 0 :(得分:0)
实际上,这是错误的。
msg1.payload= [
{ "myNm": "aaa"},
{
$set: {
"nm": msg.myrec.nm,
"addressdets": msg.myrec.addressdets
}
},
{upsert: true}
];
node.send({payload:msg1});
node.send()
需要一个msg对象,但是您传递的是包含消息对象的对象。
{ payload: msg1 }
扩展为:
{
payload: {
payload: [
{ "myNm": "aaa"},
{
$set: {
"nm": msg.myrec.nm,
"addressdets": msg.myrec.addressdets
}
},
{upsert: true}
]
}
}
将代码更改为以下内容:
msg1.payload= [
{ "myNm": "aaa"},
{
$set: {
"nm": msg.myrec.nm,
"addressdets": msg.myrec.addressdets
}
},
{upsert: true}
];
node.send(msg1)