2017-12-07 3 views
0

때때로 나는 POI의 도시 데이터베이스와 그 정보에 대한 새로운 수출을 얻었고 MongoDB에있는 모든 데이터를 Loopback-API와 함께 갖고 싶습니다. 따라서 필자는 원하는 구조로 데이터를 축소하고 가져 오려고합니다.MongoDB에 많은 데이터 세트를 올바르게 삽입 및/또는 업데이트 (몽구스 사용)?

이러한 내보내기를 처음 받으면 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

두 번째로 mongo의 업데이트 명령을 upsert으로 설정하고 true으로 설정합니다. query에서

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

update에서 _id 통과 object을 통과하고 옵션에 trueupsert을 설정합니다. 이 경우 문서가 업데이트되면 새 문서가없는 경우 새 문서가 만들어집니다.

+0

"update"매개 변수가 json 객체 배열 인 경우 updateMany가 동일합니까? – SVARTBERG

+0

예, updateMany의 첫 번째 매개 변수는 업데이트의 쿼리 대신 필터입니다. 그것이 도움이된다면 그것을 정답으로 표시하십시오 :) –

관련 문제