Монгольский DeadBeef .toArray () возвращает _id в неожиданном формате - PullRequest
4 голосов
/ 11 января 2012

Я люблю монгольскую мертвую говядину, но я в тупике.Я хотел бы получить результаты простого .find () для возврата в том же формате JSON, который соответствует выводу командной строки Mongo:

$ db.mycollection.find();
# outputs..
# { ...some data... , "_id" : ObjectId("4f0b371c0000008b6d000008") }

Однако с deedbeef метод .find ()не возвращает результат и не предоставляет обратный вызов.Поэтому я использую .toArray ();что мне кажется правильным.

Mongolian = require("mongolian"),
server = new Mongolian,
db = server.db("mydatabase"),
mycollection = db.collection("mycollection"),

mycollection.find().toArray(function(err, data){
   res.write(JSON.stringify(data));
});

// outputs..
// { ...some data... ,  _id: { bytes: <Buffer 4f 0b 61 5a 00 00 00 7e 6e 00 00 06> } }

Стентификация двоичного кода _id (я предполагаю, что это и есть буфер) приводит к метрике @ # $!тонна данных.Как правильно вернуть JSON из mycollection.find ()?

~~~~~~~

Мне удалось убрать _id из результатов, используя следующее:

 mycollection.find({}, { id:0 }).toArray(function(err, data){
   res.write(JSON.stringify(data));
});

Однако большая проблема, связанная с преобразованием _id из JSON в BSON, все еще остается.

1 Ответ

3 голосов
/ 11 января 2012

Проблема в том, что «данные» - это массив объектов документа, но не все данные имеют формат, совместимый с JSON.

Смотрите здесь: https://github.com/marcello3d/node-mongolian в BSONРаздел Типы данных.

Похоже, ваш документ имеет тип ObjectId, поэтому вам нужно либо удалить данные ObjectId перед преобразованием в JSON, либо преобразовать данные в работающий формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...