2017-12-07 18 views
0

都合の良いことに、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キーのために失敗します。

答えて

0

もう一度、upserttrueに設定されたmongoのアップデートコマンドを使用します。 query

db.collection.update(query, update, options) 

update_idは、objectを通過し、オプションでtrueupsert設定渡します。これにより、ドキュメントが存在する場合は更新され、存在しない場合は新しいドキュメントが作成されます。

+0

"update"パラメータがオブジェクトのjson配列の場合、updateManyは同じですか? – SVARTBERG

+0

はい、updateManyでは、最初のパラメータは更新のクエリではなくフィルタです。それが助けがあれば、正解とマークしてください:) –

関連する問題