使用Node-Red将消息异步发送到MongoDB

时间:2019-03-12 10:43:27

标签: mongodb node-red

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。

关于我所缺少的任何想法。

1 个答案:

答案 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)