Отправка сообщений асинхронно в MongoDB с использованием Node-Red - PullRequest
0 голосов
/ 12 марта 2019

Новичок в Node-Red и просто пытается понять концепцию асинхронной отправки сообщений, используя node.send({payload:result})

Я пытаюсь выполнить обновление MongoDB с помощью upsert на основе результатов, возвращаемых узлом.Функция send (), но, к сожалению, вместо 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 голосов
/ 12 марта 2019

На самом деле, глядя на это, это неправильно.

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)
...