如何用Mongoose删除JSON对象中的数组元素?

我已经检查了下面的stackoverflow问题:

  1. Mongoose删除文件中的数组元素并保存
  2. 如何删除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){})