都合の良いことに、POIの都市データベースとその情報に関する新しい輸出を得ることができ、MongoDBのすべてのデータをLoopback-APIで取得したいと考えています。したがって、私は自分の望む構造にデータを縮小し、インポートしようとします。多くのデータセットをMongoDB(mongooseを使用)に正しく挿入および/または更新していますか?
このようなエクスポートを初めて受け取ると、insertMany()でデータを挿入するだけで済みます。
私は新たな輸出を取得すると、それはそれは私が実際に私の既存のPOIは、その新しいデータに置き換えることにしたい更新POIを含んでいることを意味します。だから私はupdateMany()を使うと思っていたが、私の場合はどうやってやるのか分からなかった。
const fs = require('fs');
const mongoose = require('mongoose');
const data = JSON.parse(fs.readFileSync('data.json', 'utf8'));
// Connect to database
mongoose.connect('mongodb://localhost/test', {
useMongoClient: true
}, (err) => {
if (err) console.log('Error', err);
});
// Define schema
let poiSchema = new mongoose.Schema({
_id: Number,
name: String,
geo: String,
street: String,
housenumber: String,
phone: String,
website: String,
email: String,
category: String
});
// Set model
let poi = mongoose.model('poi', poiSchema);
// Generate specified data from given export
let reducedData = data['ogr:FeatureCollection']['gml:featureMember'].reduce((endData, iteratedItem) => {
endData = endData.length > 0 ? endData : [];
endData.push({
_id: iteratedItem['service']['fieldX'],
name: iteratedItem['service']['fieldX'],
geo: iteratedItem['service']['fieldX']['fieldY']['fieldZ'],
street: iteratedItem['service']['fieldX'],
housenumber: iteratedItem['service']['fieldX'],
phone: iteratedItem['service']['fieldX'],
website: iteratedItem['service']['fieldX'],
email: iteratedItem['service']['fieldX'],
category: iteratedItem['service']['fieldX']
});
return endData;
}, []);
//
// HERE: ?!?!? Insert/update reduced data in MongoDB collection ?!?!?
//
mongoose.disconnect();
だから私は変更されているすべてのものを更新する:
は、ここで私がこれまで持っているものです。
私がinsertMany()に残すと、もちろんdupキーのために失敗します。
"update"パラメータがオブジェクトのjson配列の場合、updateManyは同じですか? – SVARTBERG
はい、updateManyでは、最初のパラメータは更新のクエリではなくフィルタです。それが助けがあれば、正解とマークしてください:) –