oracle / graaljs

A ECMAScript 2023 compliant JavaScript implementation built on GraalVM. With polyglot language interoperability support. Running Node.js applications!
Universal Permissive License v1.0
1.77k stars 188 forks source link

How can graaljs not merge Array? #838

Open k1tano opened 2 weeks ago

k1tano commented 2 weeks 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 2 weeks 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.