Mongodb $push 运算符不起作用

Posted

技术标签:

【中文标题】Mongodb $push 运算符不起作用【英文标题】:Mongo db $push operator not working 【发布时间】:2018-04-27 08:33:35 【问题描述】:

我正在尝试将数据推送到 mongo 模型中对象的数组中 通过使用 req.params 方法 但它给了我 错误:

MongoError:无法使用部分(friends of friends.username)遍历元素(friends:[])

这是我的代码:

后端

  router.post('/accept/:id/:username',isLoggedIn,function(req,res)
              User.findOneAndUpdate(username:req.user.username,'friendRequest._id':req.params.id,
              $set:'friendRequest.$.Status':'Friend','friendRequest.$.Color':'green',function(err,founduser)

                if (err) 
                  throw err;
                 else 

               User.findOneAndUpdate(username:req.user.username,
               $push:'friends.username':req.params.username
               ,function(err,founduser)

                 if (err) 
                  throw err;
                 else 

//Error is coming from this line
                User.findOneAndUpdate(username:req.params.username,
                $push:'friends.username':req.user.username
                ,function(err,founduser)

                     if (err) 
                      throw err;
                     else 
                        res.render("back");
                    
                   )  
                
                   ) 
                   
              )  
            )


**My Model**


            var  mongoose = require('mongoose');
            var passportLocalMongoose = require('passport-local-mongoose');

            var UserSchema = new mongoose.Schema(

            username:String,
            password :String,

              friends:[    
            username: String  //Here I wanna insert a data
            ],

前端

<form  action = "/accept/<%=request._id%>/<%=request.username%>" method = "post"> 
         <button id="add" class="ui  medium  <%=request.Color%> button"><%=request.Status%></button> 
         </form>

【问题讨论】:

【参考方案1】:

需要做一点小改动:

       User.findOneAndUpdate(
                username: req.params.username
            , 
                $push: 
                    "friends":
                           username:req.params.username
                                            
                
            ,function(err,founduser)
                 if (err) 
                  throw err;
                 else 
                    res.render("back");
                )

【讨论】:

以上是关于Mongodb $push 运算符不起作用的主要内容,如果未能解决你的问题,请参考以下文章

$push 到带有 mongoose 的 MongoDB 中的数组不起作用

Mongodb位置运算符不起作用

带有 $sum 操作的 Mongodb 位置运算符“$”不起作用

登录功能后history.push不起作用

为啥 router.push 不起作用? [Vue 3] [Vuex 4]

插入许多在 mongoDB 中不起作用,为啥?