2016-06-28 3 views
3

이전에 몽고 컬렉션에 문서를 삽입했다고 말하십시오.노드의 MongoDB에서 findOneAndUpdate를 사용하는 방법

MongoClient.connect(url, function(err,db){ 
     if(err) {throw err;} 
     else { 
     document = {action: "alert", 
        protocol: "udp", 
        port: "80", 
        _id: "12" } 
     var collection = db.collection("connections"); 
     collection.insertOne(document, function(err,result){ 
      if (err) {throw err;} 
      else { 
      console.log("Successful") 
      db.close(); 
      } 
     } 
     } 

이제 프로토콜 필드를 업데이트하고 싶습니다. 나는 운이 지금까지

 MongoClient.connect(url, function(err,db){ 
     if (err) { throw err; } 
     else { 
     var collection = db.collection("connections"); 
     collection.findOneAndUpdate({_id: "12"}, {$set: {protocol: "http"}}, {new: true}, function(err,doc) { 
      if (err) { throw err; } 
      else { console.log("Updated"); } 
     }); 
     } 
    }); 

내가 findOneAndUpdate 방법에 잘못된 매개 변수를 전달하고 있는가 없습니다와 함께 무엇을 가지고? 데이터베이스에 올바르게 연결합니다.

+0

실제로 _id를 "12"로 정의 하시겠습니까? 아니면 Mongo의 ObjectId를 수락 하시겠습니까? 후자의 경우 ObjectId 인스턴스 대신 쿼리에서 _id로 문자열을 전달하기 때문에 문서를 찾을 수 없습니다. 또한 오류는 어떻게 생겼습니까? 마지막으로, 왜'{new : true}'인가? –

+0

몽구스 (http://mongoosejs.com/index.html) 또는 이와 유사한 것을 사용합니까? 일반적으로 사람들이 node.js에 사용하는 것입니다. 오류 메시지가 있습니까? – kazu

+0

노드에 mongodb를 사용하고 있습니다. 그리고 그것이 올바르게 업데이트 되기만하면 _id 오류가 아닙니다. 단지 전체 문서를 프로토콜로 바꿉니다. – Spothedog1

답변

0

세 번째 인수가 유효하지 않습니다 ({새로운 : TRUE})

6

내가 true로 설정 "upsert는"새 문서를 만드는 경우에는 문서가 일치하지 않을 때 당신이

MongoClient.connect(url, function(err,db){ 
    if (err) { throw err; } 
    else { 
    var collection = db.collection("connections"); 
    collection.findOneAndUpdate({_id: "12"}, {$set: {protocol: "http"}}, {upsert: true}, function(err,doc) { 
     if (err) { throw err; } 
     else { console.log("Updated"); } 
    }); 
    } 
}); 

을 시도해야한다고 생각 쿼리 기준.

0
MongoClient.connect(url, function(err,db){ 
    if (err) { throw err; } 
    else { 
    var collection = db.collection("connections"); 
    collection.findOneAndUpdate({"_id": "12"}, {$set: {"protocol": "http"}}, function(err,doc) { 
     if (err) { throw err; } 
     else { console.log("Updated"); } 
    }); 
    } 
}); 

레코드를 업데이트하려면 {upsert : true} 및 {new : true}를 사용할 필요가 없습니다. 이 솔루션은 더 잘 작동합니다. 한 번 시도하고 코드에 오류가 있으면 제안 해주십시오.

필터와 일치하는 것이 없으면 upsert를 사용하여 업데이트 문서를 삽입하십시오.

관련 문제