Подавить типы значений в функции MongoDB Stitch - PullRequest
0 голосов
/ 22 марта 2019

A Функция стежка возвращает типы значений для каждого нестрокового поля. Я считаю, что это потому, что функции возвращают данные в MongoDB Extended JSON .

С другой стороны, Mongo Shell возвращает стандартный JSON без типов значений.

Как подавить типы значений, возвращаемые функцией MongoDB ? Можно ли конвертировать EJSON обратно в JSON?

Например, для поля даты оболочка Mongo возвращает:

"dob" : ISODate("1995-01-11T00:00:00.000-07:00")

Тот же запрос в функции Stitch возвращает:

"dob": {
  "$date": {
    "$numberLong": "232182000000"
  }

Моя функция стежка выглядит следующим образом:

exports = function(){
    const collection = context.services.get("mongodb-atlas").db("mydb").collection("mycollection");
    const doc = collection.find().toArray();
  return doc;
};

Есть ли вспомогательная функция, которая может удалять типы значений? Что-то вроде ...

exports = function(){
    const collection = context.services.get("mongodb-atlas").db("mydb").collection("mycollection");
    const doc = collection.find().toArray();
    const noValueTypes = doc.stripValueTypes()
  return noValueTypes;
};

1 Ответ

1 голос
/ 26 марта 2019

Когда результат функции передается клиенту, он действительно сериализуется как EJSON.

В идеале ваш клиент может анализировать EJSON обратно в обычные объекты JS, например, с библиотекой EJSON , которая также встроена в SDK Stitch .

Конечно, если вы используете Stitch SDK, вызов функции напрямую еще лучше.

Другой вариант - использовать объект ответа для передачи JSON, например:

exports = function(request, response) {
  // ... get data ...
  response.addHeader(
    "Content-Type",
    "application/json"
  );
  response.setBody(JSON.stringify(myData));
};

Обратите внимание, что JSON не может представлять некоторые специальные типы BSON, такие как идентификатор объекта, поэтому вам следует помнить об этом при принятии решения, какие данные возвращать.

...