如何用Mongoose删除JSON对象中的数组元素?
我已经检查了下面的stackoverflow问题:
- Mongoose删除文件中的数组元素并保存
- 如何删除MongoDB中的数组元素?
这是我试过的:
var User = require('../model/user_model.js'); router.put('/favoritemovies/:id', function(req, res){ console.log(req.params.id); console.log(req.body.email);//I am able to console.log both value User.update( {_id: req.body.email}, { $pullAll: { favoriteMovies: {id:req.params.id} } } }, });
我的用户模式:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var ObjectId = Schema.ObjectId; var userSchema = new Schema ({ id: ObjectId, name: String, password: String, email: {type: String, unique: true}, favoriteMovies: [] }); module.exports = mongoose.model('users', userSchema);
这是我的JSON对象的结构:
{ "_id": { "$oid": "583893712f599701531b60bf" }, "name": "", "password": "", "email": "", "favoriteMovies": [ { "vote_average": , "video": , "vote_count": , "popularity": , "backdrop_path": "", "title": "", "original_language": "", "original_title": "", "id": , "genre_ids": [], "release_date": "", "overview": "", "adult": , "poster_path": "", "_id": "" }
我想从favoriteMovies数组中删除一个或多个元素,如果他们的id匹配我的id。 我没有收到任何错误消息,但是该元素也不会被删除。
什么是适当的要求来实现呢?
$pullAll
用于从数组中删除多个条目,并在其查询中使用一个数组。
你只是想删除一个条目,所以只需使用$pull
。
{ $pull: { favoriteMovies: {id: req.params.id} } } }
这将使用拉,你确定更新条件是正确的?
{_id: req.body.email}
关于你的例子:
"_id": { "$oid": "583893712f599701531b60bf" },
看来你应该使用:
{email: req.body.email}
我发现这个问题,我错过了查询结束时的callback函数。
User.update( {_id: req.body.email}, { $pull: { favoriteMovies: { id: req.params.id} } }, function(err, model){})