[{"data":1,"prerenderedAt":595},["ShallowReactive",2],{"node-red-\u002Fnode-red\u002Fcore-nodes\u002Fjoin":3},{"id":4,"title":5,"body":6,"description":17,"extension":588,"meta":589,"navigation":590,"path":591,"seo":592,"stem":593,"__hash__":594},"nodeRed\u002Fnode-red\u002Fcore-nodes\u002Fjoin.md","Node-RED - Join Node",{"type":7,"value":8,"toc":567},"minimark",[9,14,18,23,26,30,33,38,46,52,99,103,106,132,135,150,154,157,160,180,183,187,194,205,208,212,216,219,224,228,235,238,242,249,252,256],[10,11,13],"h1",{"id":12},"join","Join",[15,16,17],"p",{},"Joins sequences of messages into a single message.",[19,20,22],"h2",{"id":21},"where-and-why-do-we-use-the-join-node","Where and why do we use the Join node?",[15,24,25],{},"The Join node combines multiple messages into one. It's the counterpart to the Split node and can automatically reverse a split operation, or you can configure it to merge messages from different sources based on specific rules. This is essential when you need to aggregate data from multiple sources, reassemble split sequences, or reduce message streams into summary values.",[19,27,29],{"id":28},"modes-of-operation","Modes of operation",[15,31,32],{},"The Join node operates in three different modes, each suited for different use cases.",[34,35,37],"h3",{"id":36},"automatic-mode","Automatic Mode",[15,39,40,41,45],{},"When paired with the Split node, automatically joins messages to reverse the split that was performed. Uses the ",[42,43,44],"code",{},"msg.parts"," property of incoming messages to determine how the sequence should be joined.",[15,47,48,49,51],{},"The ",[42,50,44],{}," property should contain:",[53,54,55,63,69,75,81,87,93],"ul",{},[56,57,58,62],"li",{},[59,60,61],"strong",{},"id"," - identifier for the message group",[56,64,65,68],{},[59,66,67],{},"index"," - position within the group",[56,70,71,74],{},[59,72,73],{},"count"," - total number of messages in the group",[56,76,77,80],{},[59,78,79],{},"type"," - the message type (string, array, object, or buffer)",[56,82,83,86],{},[59,84,85],{},"ch"," - for strings or buffers, the delimiter used to split",[56,88,89,92],{},[59,90,91],{},"key"," - for objects, the property key this message came from",[56,94,95,98],{},[59,96,97],{},"len"," - the length when split using fixed length",[34,100,102],{"id":101},"manual-mode","Manual Mode",[15,104,105],{},"Configure how to join sequences by selecting which message property to join and choosing the output format:",[53,107,108,114,120,126],{},[56,109,110,113],{},[59,111,112],{},"String or buffer"," - joins the selected property with specified join characters or buffer",[56,115,116,119],{},[59,117,118],{},"Array"," - adds each selected property or entire message to an output array",[56,121,122,125],{},[59,123,124],{},"Key\u002Fvalue object"," - uses a property of each message as the key for storing the required value",[56,127,128,131],{},[59,129,130],{},"Merged object"," - merges the property of each message under a single object",[15,133,134],{},"You can define when to send the combined message:",[53,136,137,140,143],{},[56,138,139],{},"After a specific number of message parts",[56,141,142],{},"After a timeout following the first message",[56,144,145,146,149],{},"After receiving a message with ",[42,147,148],{},"msg.complete"," property set",[34,151,153],{"id":152},"reduce-sequence-mode","Reduce Sequence Mode",[15,155,156],{},"Applies a JSONata expression to each message in a sequence and accumulates the result to produce a single message. This is useful for calculations like sums, averages, or any custom aggregation logic.",[15,158,159],{},"The reduce expression runs for each message with special variables available:",[53,161,162,168,174],{},[56,163,164,167],{},[42,165,166],{},"$A"," - the accumulated value",[56,169,170,173],{},[42,171,172],{},"$I"," - index of the message in the sequence",[56,175,176,179],{},[42,177,178],{},"$N"," - number of messages in the sequence",[15,181,182],{},"An optional fix-up expression can be applied after all messages have been processed to perform final calculations.",[19,184,186],{"id":185},"how-the-node-handles-messages","How the node handles messages",[15,188,189,190,193],{},"The Join node buffers messages internally to work across sequences. The Node-RED runtime setting ",[42,191,192],{},"nodeMessageBufferMaxLength"," limits how many messages can be buffered to prevent memory issues.",[15,195,196,197,200,201,204],{},"If you send a message with the ",[42,198,199],{},"msg.reset"," property set, the node clears the partly complete message without sending it and resets any part counts. When using manual mode with timeout, send a message with ",[42,202,203],{},"msg.restartTimeout"," set to restart the timeout.",[15,206,207],{},"For manual mode, the other properties of the output message come from the last message received before sending.",[19,209,211],{"id":210},"examples","Examples",[34,213,215],{"id":214},"automatic-mode-1","Automatic mode",[15,217,218],{},"This example shows automatic mode. The Split node breaks an array into individual messages, then Join automatically reassembles them back into the original array.",[220,221],"render-flow",{":height":222,"flow":223},"200","W3siaWQiOiJiNWVhNmQyYS42ZTdiYiIsInR5cGUiOiJ0YWIiLCJsYWJlbCI6Im9wZW5WYWx2ZSIsImRpc2FibGVkIjpmYWxzZSwiaW5mbyI6IiJ9LHsiaWQiOiI4NGVkMjI3NTUyYjRlNmViIiwidHlwZSI6ImpvaW4iLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiIiwibW9kZSI6ImF1dG8iLCJidWlsZCI6Im9iamVjdCIsInByb3BlcnR5IjoicGF5bG9hZCIsInByb3BlcnR5VHlwZSI6Im1zZyIsImtleSI6InRvcGljIiwiam9pbmVyIjoiXFxuIiwiam9pbmVyVHlwZSI6InN0ciIsImFjY3VtdWxhdGUiOnRydWUsInRpbWVvdXQiOiIiLCJjb3VudCI6IjMiLCJyZWR1Y2VSaWdodCI6ZmFsc2UsInJlZHVjZUV4cCI6IiIsInJlZHVjZUluaXQiOiIiLCJyZWR1Y2VJbml0VHlwZSI6Im51bSIsInJlZHVjZUZpeHVwIjoiIiwieCI6NTkwLCJ5IjozMDAsIndpcmVzIjpbWyJmMmRiYTI4NWQ3YTA2N2NkIl1dfSx7ImlkIjoiNTIyYjRlMjQ3ZTg0YWMwZSIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiU2VuZCBhcnJheSIsInByb3BzIjpbeyJwIjoicGF5bG9hZCJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJwYXlsb2FkIjoiWyAgIHsgICAgIFwiaWRcIjogMSwgICAgIFwidGFza1wiOiBcIkNvbXBsZXRlIHByb2plY3QgcHJvcG9zYWxcIiwgICAgIFwiY29tcGxldGVkXCI6IGZhbHNlICAgfSwgICB7ICAgICBcImlkXCI6IDIsICAgICBcInRhc2tcIjogXCJSZXZpZXcgcHJlc2VudGF0aW9uIHNsaWRlc1wiLCAgICAgXCJjb21wbGV0ZWRcIjogdHJ1ZSAgIH0sICAgeyAgICAgXCJpZFwiOiAzLCAgICAgXCJ0YXNrXCI6IFwiUHJlcGFyZSBmb3IgY2xpZW50IG1lZXRpbmdcIiwgICAgIFwiY29tcGxldGVkXCI6IGZhbHNlICAgfSBdIiwicGF5bG9hZFR5cGUiOiJqc29uIiwieCI6MjIwLCJ5IjozMDAsIndpcmVzIjpbWyIzNTFlOThhNTVlNWE1MGM2Il1dfSx7ImlkIjoiZjJkYmEyODVkN2EwNjdjZCIsInR5cGUiOiJkZWJ1ZyIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiJkZWJ1ZyAxIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoiZmFsc2UiLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjc4MCwieSI6MzAwLCJ3aXJlcyI6W119LHsiaWQiOiJkNDdhNWVkYjJkNWQ1YjcwIiwidHlwZSI6ImNvbW1lbnQiLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiSm9pbmluZyB0aGUgbWVzc2FnZXMgdG8gcmV2ZXJzZSB0aGUgc3BsaXQgdGhhdCB3YXMgcGVyZm9ybWVkLiIsImluZm8iOiIiLCJ4Ijo1MDAsInkiOjIyMCwid2lyZXMiOltdfSx7ImlkIjoiMzUxZTk4YTU1ZTVhNTBjNiIsInR5cGUiOiJzcGxpdCIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiIiLCJzcGx0IjoiXFxuIiwic3BsdFR5cGUiOiJzdHIiLCJhcnJheVNwbHQiOjEsImFycmF5U3BsdFR5cGUiOiJsZW4iLCJzdHJlYW0iOmZhbHNlLCJhZGRuYW1lIjoiIiwieCI6NDEwLCJ5IjozMDAsIndpcmVzIjpbWyI4NGVkMjI3NTUyYjRlNmViIl1dfV0=",[34,225,227],{"id":226},"manual-mode-1","Manual mode",[15,229,230,231,234],{},"Here manual mode combines three separate sensor readings into one object. Each message has a different ",[42,232,233],{},"msg.topic"," (temperature, humidity, pressure) and those topics become the keys in the output object.",[220,236],{":height":222,"flow":237},"W3siaWQiOiJiNWVhNmQyYS42ZTdiYiIsInR5cGUiOiJ0YWIiLCJsYWJlbCI6Im9wZW5WYWx2ZSIsImRpc2FibGVkIjpmYWxzZSwiaW5mbyI6IiJ9LHsiaWQiOiI4NGVkMjI3NTUyYjRlNmViIiwidHlwZSI6ImpvaW4iLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiIiwibW9kZSI6ImN1c3RvbSIsImJ1aWxkIjoib2JqZWN0IiwicHJvcGVydHkiOiJwYXlsb2FkIiwicHJvcGVydHlUeXBlIjoibXNnIiwia2V5IjoidG9waWMiLCJqb2luZXIiOiJcXG4iLCJqb2luZXJUeXBlIjoic3RyIiwiYWNjdW11bGF0ZSI6dHJ1ZSwidGltZW91dCI6IiIsImNvdW50IjoiMyIsInJlZHVjZVJpZ2h0IjpmYWxzZSwicmVkdWNlRXhwIjoiIiwicmVkdWNlSW5pdCI6IiIsInJlZHVjZUluaXRUeXBlIjoibnVtIiwicmVkdWNlRml4dXAiOiIiLCJ4Ijo0OTAsInkiOjMwMCwid2lyZXMiOltbImYyZGJhMjg1ZDdhMDY3Y2QiXV19LHsiaWQiOiI1MjJiNGUyNDdlODRhYzBlIiwidHlwZSI6ImluamVjdCIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiIiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifSx7InAiOiJ0b3BpYyIsInZ0Ijoic3RyIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6InRlbXBlcmF0dXJlIiwicGF5bG9hZCI6IjQwIiwicGF5bG9hZFR5cGUiOiJudW0iLCJ4IjoyNjAsInkiOjI0MCwid2lyZXMiOltbIjg0ZWQyMjc1NTJiNGU2ZWIiXV19LHsiaWQiOiIxMmU1NGU0MDY2YmFjN2EzIiwidHlwZSI6ImluamVjdCIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiIiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifSx7InAiOiJ0b3BpYyIsInZ0Ijoic3RyIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6Imh1bWlkaXR5IiwicGF5bG9hZCI6IjMzIiwicGF5bG9hZFR5cGUiOiJudW0iLCJ4IjoyNzAsInkiOjMwMCwid2lyZXMiOltbIjg0ZWQyMjc1NTJiNGU2ZWIiXV19LHsiaWQiOiJiMDRkNGY1MWYwNjAyNjA3IiwidHlwZSI6ImluamVjdCIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiIiLCJwcm9wcyI6W3sicCI6InBheWxvYWQifSx7InAiOiJ0b3BpYyIsInZ0Ijoic3RyIn1dLCJyZXBlYXQiOiIiLCJjcm9udGFiIjoiIiwib25jZSI6ZmFsc2UsIm9uY2VEZWxheSI6MC4xLCJ0b3BpYyI6InByZXNzdXJlIiwicGF5bG9hZCI6IjEwMDAiLCJwYXlsb2FkVHlwZSI6Im51bSIsIngiOjI3MCwieSI6MzYwLCJ3aXJlcyI6W1siODRlZDIyNzU1MmI0ZTZlYiJdXX0seyJpZCI6ImYyZGJhMjg1ZDdhMDY3Y2QiLCJ0eXBlIjoiZGVidWciLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiZGVidWcgMSIsImFjdGl2ZSI6dHJ1ZSwidG9zaWRlYmFyIjp0cnVlLCJjb25zb2xlIjpmYWxzZSwidG9zdGF0dXMiOmZhbHNlLCJjb21wbGV0ZSI6ImZhbHNlIiwic3RhdHVzVmFsIjoiIiwic3RhdHVzVHlwZSI6ImF1dG8iLCJ4Ijo3MjAsInkiOjMwMCwid2lyZXMiOltdfSx7ImlkIjoiZDQ3YTVlZGIyZDVkNWI3MCIsInR5cGUiOiJjb21tZW50IiwieiI6ImI1ZWE2ZDJhLjZlN2JiIiwibmFtZSI6IkNvbWJpbmluZyB0aHJlZSBwYXlsb2FkIGludG8gb25lIG9iamVjdCAiLCJpbmZvIjoiIiwieCI6NTIwLCJ5IjoxODAsIndpcmVzIjpbXX1d",[34,239,241],{"id":240},"reduce-sequence-mode-1","Reduce sequence mode",[15,243,244,245,248],{},"This example uses reduce mode to calculate total inventory. The expression ",[42,246,247],{},"$A+payload.quantity"," adds each item's quantity to the running total, starting from 0.",[220,250],{":height":222,"flow":251},"W3siaWQiOiJiNWVhNmQyYS42ZTdiYiIsInR5cGUiOiJ0YWIiLCJsYWJlbCI6Im9wZW5WYWx2ZSIsImRpc2FibGVkIjpmYWxzZSwiaW5mbyI6IiJ9LHsiaWQiOiI4NGVkMjI3NTUyYjRlNmViIiwidHlwZSI6ImpvaW4iLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiIiwibW9kZSI6InJlZHVjZSIsImJ1aWxkIjoib2JqZWN0IiwicHJvcGVydHkiOiJwYXlsb2FkIiwicHJvcGVydHlUeXBlIjoibXNnIiwia2V5IjoidG9waWMiLCJqb2luZXIiOiJcXG4iLCJqb2luZXJUeXBlIjoic3RyIiwiYWNjdW11bGF0ZSI6dHJ1ZSwidGltZW91dCI6IiIsImNvdW50IjoiMyIsInJlZHVjZVJpZ2h0IjpmYWxzZSwicmVkdWNlRXhwIjoiJEErcGF5bG9hZC5xdWFudGl0eSIsInJlZHVjZUluaXQiOiIwIiwicmVkdWNlSW5pdFR5cGUiOiJudW0iLCJyZWR1Y2VGaXh1cCI6IiRBIiwieCI6NTkwLCJ5IjozMDAsIndpcmVzIjpbWyJmMmRiYTI4NWQ3YTA2N2NkIl1dfSx7ImlkIjoiNTIyYjRlMjQ3ZTg0YWMwZSIsInR5cGUiOiJpbmplY3QiLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiU2VuZCBhcnJheSIsInByb3BzIjpbeyJwIjoicGF5bG9hZCJ9XSwicmVwZWF0IjoiIiwiY3JvbnRhYiI6IiIsIm9uY2UiOmZhbHNlLCJvbmNlRGVsYXkiOjAuMSwidG9waWMiOiIiLCJwYXlsb2FkIjoiWyAgIHsgICAgIFwiaWRcIjogMSwgICAgIFwibmFtZVwiOiBcIkxhcHRvcFwiLCAgICAgXCJxdWFudGl0eVwiOiAxNSAgIH0sICAgeyAgICAgXCJpZFwiOiAyLCAgICAgXCJuYW1lXCI6IFwiUHJpbnRlclwiLCAgICAgXCJxdWFudGl0eVwiOiA1ICAgfSwgICB7ICAgICBcImlkXCI6IDMsICAgICBcIm5hbWVcIjogXCJNb25pdG9yXCIsICAgICBcInF1YW50aXR5XCI6IDEwICAgfSBdIiwicGF5bG9hZFR5cGUiOiJqc29uIiwieCI6MjIwLCJ5IjozMDAsIndpcmVzIjpbWyIzNTFlOThhNTVlNWE1MGM2Il1dfSx7ImlkIjoiZjJkYmEyODVkN2EwNjdjZCIsInR5cGUiOiJkZWJ1ZyIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiJkZWJ1ZyAxIiwiYWN0aXZlIjp0cnVlLCJ0b3NpZGViYXIiOnRydWUsImNvbnNvbGUiOmZhbHNlLCJ0b3N0YXR1cyI6ZmFsc2UsImNvbXBsZXRlIjoiZmFsc2UiLCJzdGF0dXNWYWwiOiIiLCJzdGF0dXNUeXBlIjoiYXV0byIsIngiOjc4MCwieSI6MzAwLCJ3aXJlcyI6W119LHsiaWQiOiJkNDdhNWVkYjJkNWQ1YjcwIiwidHlwZSI6ImNvbW1lbnQiLCJ6IjoiYjVlYTZkMmEuNmU3YmIiLCJuYW1lIjoiQ2FsY3VsYXRpbmcgdG90YWwgc3RvY2tzIHVzaW5nIEpvaW4gbm9kZSByZWR1Y2VkIGV4cHJlc3Npb24gbW9kZSIsImluZm8iOiIiLCJ4Ijo1MTAsInkiOjIyMCwid2lyZXMiOltdfSx7ImlkIjoiMzUxZTk4YTU1ZTVhNTBjNiIsInR5cGUiOiJzcGxpdCIsInoiOiJiNWVhNmQyYS42ZTdiYiIsIm5hbWUiOiIiLCJzcGx0IjoiXFxuIiwic3BsdFR5cGUiOiJzdHIiLCJhcnJheVNwbHQiOjEsImFycmF5U3BsdFR5cGUiOiJsZW4iLCJzdHJlYW0iOmZhbHNlLCJhZGRuYW1lIjoiIiwieCI6NDEwLCJ5IjozMDAsIndpcmVzIjpbWyI4NGVkMjI3NTUyYjRlNmViIl1dfV0=",[19,253,255],{"id":254},"node-documentation","Node Documentation",[257,258,261,263,264,263,267,263,295,263,299,263,378,263,382,263,386,263,395,263,398,263,401,263,433,263,436,263,443,263,452,263,458,263,463,263,467,263,470,263,527,533,263,557,263,561],"div",{"className":259},[260],"core-node-doc",[15,262,17],{}," ",[15,265,266],{},"There are three modes available:",[268,269,270,274,283,286,289,292],"dl",{},[271,272,273],"dt",{},"automatic",[275,276,277,278,282],"dd",{},"When paired with the ",[279,280,281],"b",{},"split"," node, it will automatically join the messages to reverse the split that was performed.",[271,284,285],{},"manual",[275,287,288],{},"Join sequences of messages in a variety of ways.",[271,290,291],{},"reduce sequence",[275,293,294],{},"Apply an expression against all messages in a sequence to reduce it to a single message.",[34,296,298],{"id":297},"inputs","Inputs",[268,300,303,314,357,361,364,368,371,375],{"className":301},[302],"message-properties",[271,304,307,308],{"className":305},[306],"optional","parts",[309,310,313],"span",{"className":311},[312],"property-type","object",[275,315,316,317,319,320],{},"To automatically join a sequence of messages, they should all have\nthis property set. The ",[279,318,281],{}," node generates this property but it\ncan be manually created. It has the following properties:\n",[53,321,322,327,332,337,342,347,352],{},[56,323,324,326],{},[42,325,61],{}," - an identifier for the group of messages",[56,328,329,331],{},[42,330,67],{}," - the position within the group",[56,333,334,336],{},[42,335,73],{}," - the total number of messages in the group",[56,338,339,341],{},[42,340,79],{}," - the type of message - string\u002Farray\u002Fobject\u002Fbuffer",[56,343,344,346],{},[42,345,85],{}," - for a string or buffer, the data used to the split the message as either the string or an array of bytes",[56,348,349,351],{},[42,350,91],{}," - for an object, the key of the property this message was created from",[56,353,354,356],{},[42,355,97],{}," - the length of each message when split using a fixed length value",[271,358,360],{"className":359},[306],"complete",[275,362,363],{},"If set, the node will append the payload, and then send the output message in its current state.\nIf you don't wish to append the payload, delete it from the msg.",[271,365,367],{"className":366},[306],"reset",[275,369,370],{},"If set, the node will clear any partially complete message and not send it.",[271,372,374],{"className":373},[306],"restartTimeout",[275,376,377],{},"If set, and the node has a timeout configured, that timeout will be restarted.",[34,379,381],{"id":380},"details","Details",[383,384,215],"h4",{"id":385},"automatic-mode-2",[15,387,388,389,391,392,394],{},"Automatic mode uses the ",[42,390,307],{}," property of incoming messages to\ndetermine how the sequence should be joined. This allows it to automatically\nreverse the action of a ",[279,393,281],{}," node.",[383,396,227],{"id":397},"manual-mode-2",[15,399,400],{},"When configured to join in manual mode, the node is able to join sequences\nof messages into a number of different results:",[53,402,403,414,421,427],{},[56,404,405,406,409,410,413],{},"a ",[279,407,408],{},"string"," or ",[279,411,412],{},"buffer"," - created by joining the selected property of each message with the specified join characters or buffer.",[56,415,416,417,420],{},"an ",[279,418,419],{},"array"," - created by adding each selected property, or entire message, to the output array.",[56,422,405,423,426],{},[279,424,425],{},"key\u002Fvalue object"," - created by using a property of each message to determine the key under which\nthe required value is stored.",[56,428,405,429,432],{},[279,430,431],{},"merged object"," - created by merging the property of each message under a single object.",[15,434,435],{},"The other properties of the output message are taken from the last message received before the result is sent.",[15,437,438,439,442],{},"A ",[440,441,73],"i",{}," can be set for how many messages should be received before generating the output message.\nFor object outputs, once this count has been reached, the node can be configured to send a message for each subsequent message\nreceived.",[15,444,438,445,448,449,451],{},[440,446,447],{},"timeout"," can be set to trigger sending the new message using whatever has been received so far.\nThis timeout can be restarted by sending a message with the ",[42,450,203],{}," property set.",[15,453,454,455,457],{},"If a message is received with the ",[42,456,148],{}," property set, the output message is finalised and sent.\nThis resets any part counts.",[15,459,454,460,462],{},[42,461,199],{}," property set, the partly complete message is deleted and not sent.\nThis resets any part counts.",[383,464,466],{"id":465},"reduce-sequence-mode-2","Reduce Sequence mode",[15,468,469],{},"When configured to join in reduce mode, an expression is applied to each\nmessage in a sequence and the result accumulated to produce a single message.",[268,471,473,476,482,485,505,508,521,524],{"className":472},[302],[271,474,475],{},"Initial value",[275,477,478,479,481],{},"The initial value of the accumulated value (",[42,480,166],{},").",[271,483,484],{},"Reduce expression",[275,486,487,488],{},"A JSONata expression that is called for each message in the sequence.\nThe result is passed to the next call of the expression as the accumulated value.\nIn the expression, the following special variables can be used:\n",[53,489,490,495,500],{},[56,491,492,494],{},[42,493,166],{},": the accumulated value, ",[56,496,497,499],{},[42,498,172],{},": index of the message in the sequence, ",[56,501,502,504],{},[42,503,178],{},": number of messages in the sequence.",[271,506,507],{},"Fix-up expression",[275,509,510,511],{},"An optional JSONata expression that is applied after the reduce expression\nhas been applied to all messages in the sequence.\nIn the expression, following special variables can be used:\n",[53,512,513,517],{},[56,514,515,494],{},[42,516,166],{},[56,518,519,504],{},[42,520,178],{},[15,522,523],{},"By default, the reduce expression is applied in order, from the first\nto the last message of the sequence. It can optionally be applied in\nreverse order.",[15,525,526],{},"$N is the number of messages that arrive - even if they are identical.",[15,528,529,532],{},[279,530,531],{},"Example:"," the following settings, given a sequence of numeric values,\ncalculates the average value:\n",[53,534,535,543,550],{},[56,536,537,539,540],{},[279,538,484],{},": ",[42,541,542],{},"$A+payload",[56,544,545,539,547],{},[279,546,475],{},[42,548,549],{},"0",[56,551,552,539,554],{},[279,553,507],{},[42,555,556],{},"$A\u002F$N",[383,558,560],{"id":559},"storing-messages","Storing messages",[15,562,563,564,566],{},"This node will buffer messages internally in order to work across sequences. The\nruntime setting ",[42,565,192],{}," can be used to limit how many messages nodes\nwill buffer.",{"title":568,"searchDepth":569,"depth":569,"links":570},"",2,[571,572,578,579,584],{"id":21,"depth":569,"text":22},{"id":28,"depth":569,"text":29,"children":573},[574,576,577],{"id":36,"depth":575,"text":37},3,{"id":101,"depth":575,"text":102},{"id":152,"depth":575,"text":153},{"id":185,"depth":569,"text":186},{"id":210,"depth":569,"text":211,"children":580},[581,582,583],{"id":214,"depth":575,"text":215},{"id":226,"depth":575,"text":227},{"id":240,"depth":575,"text":241},{"id":254,"depth":569,"text":255,"children":585},[586,587],{"id":297,"depth":575,"text":298},{"id":380,"depth":575,"text":381},"md",{},true,"\u002Fnode-red\u002Fcore-nodes\u002Fjoin",{"title":5,"description":17},"node-red\u002Fcore-nodes\u002Fjoin","99KBwzxwmtPkuNsh3aXsvUhNA5bzAjdXfAnWy5iSADA",1780070555937]