我正在尝试构建一个简单的RESTful API,我无法弄清楚如何通过mongoose正确更新我的mongodb中的某些字段。
这是我的方案:
Sound = new Schema({
"title" : String,
"url" : String,
"time" : Number,
"like" : {
"count": Number,
"timestamps": [Number]
}
}),
Artist = new Schema({
"author" : String,
"url_to_author_image" : String,
"bio" : String,
"sounds" : [Sound]
});
当有人向/ like / sound_id发送请求时,我需要增加喜欢的数量并将时间戳添加到数组中。到目前为止,我有这样的事情:
router.post("/like/:sound_id", function(req, res){
var time = Date.now();
Artist.findOneAndUpdate( {"sounds._id":req.params.sound_id},
{ $inc : { "sounds.$.like.count" : 1 } },
{ $push : { "sounds.$.like.timestamps": time } }, function(err,doc){
if (!err) res.json({message: "wuuuuhuuu"});
});
});
但推动部分似乎是错误的。
答案 0 :(得分:0)
这是有效的,但我不确定,它是否是最有效的解决方案。
Artist.find({"sounds._id":req.params.sound_id}, function(err, sound){
sound[0].sounds.id(req.params.sound_id).like.count++;
sound[0].sounds.id(req.params.sound_id).like.timestamps.push(time);
sound[0].save(function(err){
if (!err) res.send(200);
});
});
答案 1 :(得分:0)
您需要将$inc
和$push
合并为一个对象,否则$push
将被解释为options参数:
Artist.findOneAndUpdate(
{ "sounds._id": req.params.sound_id },
{ $inc : { "sounds.$.like.count" : 1 },
$push : { "sounds.$.like.timestamps": time } },
function(err,doc){
if (!err) res.json({message: "wuuuuhuuu"});
});