2017-11-17 1 views
0

mongodbやmongooseにはメソッドがありますので、繰り返しは避けるために条件付きクエリーを作成できます " **ミドルウェアは直接フォーム入力ページ をスキップし、以来、同じ名前を持つミドルウェア を使用せずに、コレクション内の 存在重複を避けるためにメソッドを更新するメソッドの条件を作成するにはどうすればいいですか?

router.get('/page/:id/:username'/foo, 
    function(req,res){ 

    //How can I bypass this below given code if "User" with same name 
    //present in collection without using middleware 
    //Since,middleware directly skips the form filling page 

    User.findOneAndUpdate({username:req.user.username}, 
    { 
     $addToSet:{ 
      "messages":{ 
      User:req.params.username, 
      id:req.params.id 
      } 
     } 
    }, 
    function(err,user) { 
     if (err) { 
     throw err; 
     } else { 
     res.render("Form"); 
    })    
    }) 

     //I have to skip the first User.findOneAndUpdate method if it is 
     //already present 

    router.post('/page/:id/:username'/foo/post, 
    function(req,res){ 


     User.findOneAndUpdate({username:req.user.username, 
      "messages.User":req.pa 
      rams.username}, 
     { 
      $push:{ 
        "messages.$.texts":{ 
           message:req.body.message, 
           username:req.user.username 
          } 

       } 
     },function(err,user){ 
      if (err) { 
       throw err; 
      } else { 
       res.render("Form",{user:user}); 
      } 
     }) 
    }) 


    //this is what my model look-like 

     messages:[{ 
        id:{ 
        type : mongoose.Schema.Types.ObjectId, 
        ref : "User" 
        }, 

        texts:[{ 
         username:String, 
         message:String 
        }], 
        User:String 
      }], 

私はマングースにクエリの形で置くことができる任意の条件はありますか?

答えて

0

**私は、.some()構文を使用して、それをやった、私は、このソリューションは、私のような他の初心者に役立ちます願っています** `

` 
router.post('/profile/chat/:username/:id/send',isLoggedIn, 
function(req,res){ 

    User.findById(req.user._id,function(err,primaryUser){ 
    if (err) { 
     console.log(err); 
} else { 


    if (primaryUser.messages.some((message) => message.id.toString() 
    === req.params.id.toString())) { 


User.findOneAndUpdate({username:req.user.username, 
"messages.id":req.params.id}, 
{$push: 
{"messages.$.texts": 

{ 
message:req.body.message, 
username:req.user.username 
} 

} 
},function(err,user){ 
if (err) { 
console.log(err); 
} else { 

User.findOneAndUpdate({username:req.params.username, 
"messages.id":req.user.id}, 
{$push: 
{"messages.$.texts": 

{ 
message:req.body.message, 
username:req.user.username 
} 

} 
},function(err,user){ 
if (err) { 
throw err; 
} else { 

console.log("Debugg Point 3"); 

} 
}) 
console.log("Debugg Point 4"); 
res.redirect("back"); 
} 
}) 


} else { 




    var primarySpace = { 
    id:req.params.id, 
    User:req.params.username 
    } 

    primaryUser.messages.push(primarySpace); 
    primaryUser.save(); 


    User.findById(req.params.id,function(err,secondaryUser){ 
    if (err) { 
     console.log(err); 
    } else { 

    var secondarySpace = { 
    id:req.user._id, 
    User:req.user.username 
    } 

    secondaryUser.messages.push(secondarySpace); 
    secondaryUser.save(); 


User.findOneAndUpdate({username:req.user.username, 
"messages.id":req.params.id}, 
{$push: 
{"messages.$.texts": 

{ 
message:req.body.message, 
username:req.user.username 
} 

} 
    },function(err,user){ 
if (err) { 
throw err; 
} else { 

User.findOneAndUpdate({username:req.params.username, 
    "messages.id":req.user.id}, 
    {$push: 
    {"messages.$.texts": 

    { 
message:req.body.message, 
username:req.user.username 
    } 

} 
},function(err,user){ 
if (err) { 
throw err; 
} else { 

console.log("Debugg Point 1"); 

} 
}) 
console.log("Debugg Point 2"); 
res.redirect("back"); 
} 
}) 
    } 
    })  
    }  
    } 
    }) 

}) 
関連する問題