2013-01-25 5 views
0

그래서이 모든 것을 알아 내려고 노력했습니다. 그리고 나는 단순한 무언가를 놓치고 있다고 생각합니다. 그러나 나는 그것을 알아낼 수 없습니다.찾기에서 몽구스 필드로 작업하기

몽구스를 사용하여 특정 문서를 찾고 해당 문서가 발견되면 senderDel 필드가 true로 설정되어 있는지 확인한 다음 제거를 수행합니다. false로 설정된 경우 업데이트를 수행합니다.

코드 :

PMessage.delete = function(msgId, callback) 
{ 
    Message.find({_id: msgId}, function(e, res){ 
     if (res){ 
      console.log(res); 
      if (res.senderDel == true){ 
       console.log("sender deleted...call message remove"); 
       Message.remove({_id: msgId}, callback); 
      } else { 
       console.log("res.senderDel is not true"); 
       Message.findByIdAndUpdate(msgId, {$set: {receiverDel: true}}, callback); 
      } 
     } else { 
      console.log("error: " + e); 
      callback; 
     } 
    }); 
}; 

을 console.log (고해상도) 반환 :

[ { sender: 50ea4e8198c6770e1e000004, 
senderName: 'tester', 
receiver: 50ac4ac5bca9f1794b000007, 
receiverName: 'admin', 
subject: 'a', 
body: 'a', 
_id: 5101a35a7889727e35000006, 
__v: 0, 
receiverDel: false, 
senderDel: true, 
read: false, 
sentOn: '01/24/2013 21:10:50' } ] 
내가 res.senderDel으로 senderDel 필드를 참조 할 수 있다고 생각했을 것이다

? res.senderDel이 정의되지 않은 이유는 무엇입니까? 그리고이 기능을 수정하려면 어떻게해야합니까? 어떤 도움이라도 대단히 감사합니다!

편집 : 내 스키마를 추가하면 :

var messageSchema = new Schema({ 
    sender: {type: ObjectId, ref: 'User'}, 
    senderName: String, 
    receiver: {type: ObjectId, ref: 'User'}, 
    receiverName: String, 
    subject: String, 
    body: String, 
    sentOn: {type: String, default: moment().format()}, 
    read: {type: Boolean, default: false}, 
    senderDel: {type: Boolean, default: false}, 
    receiverDel: {type: Boolean, default: false} 
}); 

module.exports = mongoose.model('Message', messageSchema); 
+0

(http://mongoosejs.com/docs/guide.html)? –

+0

예, 있습니다. 게시물을 편집하여 내 스키마를 반영합니다. – thtsigma

답변

1

model.find 기능은 문서의 배열이 아닌 하나의 문서를 반환합니다. 당신은 하나의 문서를 찾으려면, model.findOne 또는 model.findById를 사용

당신은 당신의 [스키마]에서`senderDel`이 있습니까
PMessage.delete = function(msgId, callback) 
{ 
    Message.findById(msgId, function(e, res){ 
     if (res){ 
      console.log(res); 
      if (res.senderDel == true){ 
       console.log("sender deleted...call message remove"); 
       Message.remove({_id: msgId}, callback); 
      } else { 
       console.log("res.senderDel is not true"); 
       Message.findByIdAndUpdate(msgId, {$set: {receiverDel: true}}, callback); 
      } 
     } else { 
      console.log("error: " + e); 
      callback; 
     } 
    }); 
}; 
+0

오, 당신은 절대적으로 옳습니다! res [0] .senderDel을 사용하여 res {0}도 수정합니다. 도움을 주셔서 감사합니다. 나는 당신의 수정 =을 사용할 것입니다. – thtsigma