2017-01-16 107 views
0

这里我的问题是为什么watchlistSchema.update(function (error) { { $push: { watchlist: req.body.stockAdded } }});行不更新watchlist属性的现有模式?当我使用这个更新时,没有任何反应,它返回null。当我将其更改为watchlistSchema.save时,它可以正常工作,但会创建完全不同的文档。我想基本上检查用户和监视列表,如果他们都存在在一起,我想推入一个字符串到监视列表数组。我对猫鼬很陌生,所以有点混淆。猫鼬更新不起作用

var Schema = mongoose.Schema;  

var watchlistSchema = new Schema({ 
    watchlist: [{ }], 
    user: String 
}); 

var Watchlist = mongoose.model('Watchlist', watchlistSchema, "watchlist");  

app.post('/watchlistPost', function (req, res) { 

var watchlistSchema = Watchlist({ 
    'watchlist': req.body.stockAdded, 
    'user': req.user.username 
}); 

Watchlist.findOne({ 
    $and: [{ 
     'watchlist': req.body.stockAdded, 
    }, { 
     'user': req.user.username 
    }] 
}, function (err, list) { 
    if (list) { 
     res.status(200).send({ "success": "Updated Successfully", "status": 200 }); 
    } else { 
     if (req.user) { 
      watchlistSchema.update(function (error) { 
       { $push: { watchlist: req.body.stockAdded } } 
      }); 
     } else { 

     } 
    } 
}) 
}); 

回答

0

您的update语句需要包含“查找”查询。因此它可以将更新条件应用于与指定查询匹配的所有文档。

更改您的代码是这样的:

var Schema = mongoose.Schema;  

var watchlistSchema = new Schema({ 
    watchlist: [{ }], 
    user: String 
}); 

var Watchlist = mongoose.model('Watchlist', watchlistSchema, "watchlist");  

app.post('/watchlistPost', function (req, res) { 

var watchlistSchema = Watchlist({ 
    'watchlist': req.body.stockAdded, 
    'user': req.user.username 
}); 

var query = { 
    $and: [{ 
     'watchlist': req.body.stockAdded, 
    }, { 
     'user': req.user.username 
    }]}; 

Watchlist.update(query, { $push: { watchlist: req.body.stockAdded } }, ==your callback to check stuff==);