oracle / graaljs

GraalJS – A high-performance, ECMAScript compliant, and embeddable JavaScript runtime for Java
https://www.graalvm.org/javascript/
Universal Permissive License v1.0
1.82k stars 191 forks source link

How can graaljs not merge Array? #838

Open k1tano opened 3 months ago

k1tano commented 3 months ago

script like "const avgSendReceiveDiff = db.chatGptMessage.aggregate([ { $project: { created_by: 1, timeDifference: { $subtract: ["$receive_time", "$send_time"] } } }, { $group: { _id: "$created_by", avgTimeDifference: { $avg: "$timeDifference" } } } ])" When i use context.eval("js",script) I expected the "$subtract: ["$receive_time", "$send_time"]" stay unchanged and mongo java driver can parse, but when i extract the string, it was serialize into " $subtract: Array(2)", and mongodb can not parse. How can i fix this?

woess commented 3 months ago

I suppose you got that from Value.toString()? That string representation is not supposed to be consumed by applications. You can use various Value methods (like getMember(), getMemberKeys(), getArrayElement(), getArraySize()) to access object members and array elements, or use JSON.stringify to convert an object back into a string.