2017-12-29 4 views
1

배열이이고 배열의 값 중 일부가 이미 데이터베이스에있을 수 있습니다. upsert에 새 값을 입력하고 은 이전 값인을 증가시킵니다. 이 작업을 수행하는 한 가지 방법은 다음과 같습니다 데이터베이스에 업데이트 명령 및 증가 수를 사용 존재하는 모든 값에 대한mongoDB에 여러 문서 업로드 Up

  • . 다음을 사용하여 수행 할 수 있습니다. db.test.update({ link: {$in: ["A", "B"]}}, {$inc: {count: 1}}, {upsert: true, multi:true})

  • 내 데이터베이스에는없는 모든 값에 대해 각각의 값과 모든 값을 확인하고이를 데이터베이스로 업 사이 트하십시오.

두 번째 단계는 네트워크에 부하를 줄 수 있습니다. 한 명령에서 두 번째 단계를 수행 할 수있는 방법이 있습니까? 내 데이터베이스의

초기 상태 :

{ "_id" : ObjectId("5a45f97f84527190e1f28cb7"), "link" : "A", "count" : 3 } 

나는 다음과 같은 배열을 가지고 const values = ['A', 'B', 'C']

지금 내가 뭔가를 갖고 싶어이을 고려 예를 들어

이 :

{"_id": ObjectId("abc"), "link": "A", "count" : 4}, 
{"_id": ObjectId("xyz"), "link": "B", "count" : 1}, 
{"_id": ObjectId("fgh"), "link": "C", "count" : 1} 
+0

당신이 언급하는 두 번째 단계는, 그냥 하나의 명령으로 업데이트 쿼리에 true로 upsert 가능하게함으로써 아닌 이루어집니다? 귀하의 질문을 이해하지 못합니다 – divine

+0

@divine 모든 값에 대해 데이터베이스에 존재하는지 여부를 확인해야합니다. 그렇지 않으면 새 값으로 삽입해야합니다. 그러나 삽입하고자하는 많은 문서가 있기 때문에'insertMany()'와 같은 것이 있으면 배열의 모든 값을 상향 조정할 것이라고 생각했습니다. 내가 제시 한 예를 참조하십시오. –

+0

@divine 두 번째 단계에서'update()'명령을 사용하면 ** 단일 쿼리 **가 필요하며 문서에 이미있는 많은 문서를 업데이트하거나 단일 문서를 삽입합니다. 내가 원하는 것은, 데이터베이스에 존재하는 것에 따라 많은 문서를 삽입하고 싶다. –

답변

1

두 번째 단계 (위에서 언급 한대로)를 최적으로 수행하려면 find() 방법을 사용하여 DB에서 조회를 수행 할 수 있습니다.

배열 값이 DB에 없으면 find()는 빈 객체를 반환합니다. 따라서 객체의 길이는 find()에서 반환됩니다. 비어있는 것으로 확인되면 DB에 삽입하고 정보를 업데이트하십시오. nodejs 환경

예제 코드 :

var db = mongojs('dbname', ['collection_name']); 

var theLink = 'XYZ'; 

db.collection_name.find({link: theLink}, function (err, obj) { 
    if (err) 
     throw err; 
    if (obj.length == 0) 
     // write logic to insert 
    else 
     // write logic to update 
}); 
관련 문제