MongoDB和NodeJS将对象数组从mongodb写入json文件

时间:2017-05-21 19:20:35

标签: arrays json node.js mongodb object

我需要为JSON文件写一个地方数组,我从MongoDB中取出地点。以下代码

'use strict';
const jsonfile = require('jsonfile');
const debug = require('debug')('myproject:server');
const Place = require('../models/place.js');
const path = './public/places.json';


Place.find({
    reviewed: true
  }, (err, places) => {
    if (err) {
      debug(err);
    } else {
      jsonfile.writeFile(path, places, (err) => {
        if (err) {
          debug(err);
        }
      });
    }
  });

这是JSON文件中的单个对象看起来像

{ _id: 58b8d11cbaa41f288236d5fa,
  __v: 0,
  mainImg: 'placeImg-1490464803517.jpg',
  reviewed: true,
  date: 2017-03-03T02:12:44.313Z,
  description: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eum illo odit animi architecto.',
  coord: { lng: 2.166948616504669, lat: 41.382971076851476 },
  type: 'museum',
  title: 'Lorem' }

由于我在数组places中有很多对象,因此删除客户端未使用的属性是有意义的,例如__vreviewed

我在将数组写入文件之前尝试执行以下操作

let shorterPlaces = [];
places.forEach((el, i) => {
  delete el['__v'];
  delete el['reviewed'];
  shorterPlaces.push(el);
});

然后将shorterPlaces写入文件,但属性仍然存在。

当我尝试使用console.log(Object.keys(el));注销每个循环内的对象键时,我得到[ '$__', 'isNew', 'errors', '_doc' ]这对我没有任何意义。有什么东西我在这里丢失或不知道吗?

1 个答案:

答案 0 :(得分:1)

根据您require的文件,看起来您正在使用Mongoose。 Mongoose集合的find方法返回Mongoose documents,它们是具有自己的方法和getter / setter的对象,而不仅仅是数据库中的普通数据。

如果您只想要常规JS对象中的数据,则需要使用lean

Place.find({ reviewed: true })
  .lean()
  .exec((err, places) => {
     // Here, places will be an array of plain objects that you can
     // manipulate as normal
   })