我需要为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
中有很多对象,因此删除客户端未使用的属性是有意义的,例如__v
和reviewed
我在将数组写入文件之前尝试执行以下操作
let shorterPlaces = [];
places.forEach((el, i) => {
delete el['__v'];
delete el['reviewed'];
shorterPlaces.push(el);
});
然后将shorterPlaces
写入文件,但属性仍然存在。
当我尝试使用console.log(Object.keys(el));
注销每个循环内的对象键时,我得到[ '$__', 'isNew', 'errors', '_doc' ]
这对我没有任何意义。有什么东西我在这里丢失或不知道吗?
答案 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
})