Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从Mongoose中的嵌套数组中删除元素_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 从Mongoose中的嵌套数组中删除元素

Javascript 从Mongoose中的嵌套数组中删除元素,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在使用MongoDB和Node.JS开发一个upvoting/downvoting应用程序 我创建了两个相互关联的模式: var mongoose = require('mongoose'); var Voters = require('./voters'); var PostSchema = new mongoose.Schema({ title: String, link: String, upvotes: {type: Number, default: 0}, vot

我正在使用MongoDB和Node.JS开发一个upvoting/downvoting应用程序 我创建了两个相互关联的模式:

var mongoose = require('mongoose');
var Voters = require('./voters');

var PostSchema = new mongoose.Schema({
  title: String,
  link: String,
  upvotes: {type: Number, default: 0},
  voters: [Voters.schema],
  comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});


mongoose.model('Post', PostSchema);
对于选民:

var mongoose = require('mongoose');

var votersSchema = new mongoose.Schema({

    voter_id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
    votetype: Number

});

module.exports = mongoose.model('Voters', votersSchema);
为了在投票者数组中包含用户,我使用以下代码:

    var voterModel = new Voters();
    voterModel.voter_id = req.payload._id;
    voterModel.votetype = 1;
    foundPost.voters.push(voterModel);
    foundPost.save();
这很好用。为了删除用户,我尝试了几种方法,但似乎都不起作用。当前的是$pull:

    foundPost.update({'voters.voter_id': req.payload._id}, {$pull: {'voters': {'voter_id': req.payload._id, 'votetype': 1}}}, function(err){
      if (err) { console.log(err); }
    });
更新操作在mongo shell中工作,但不在节点内工作。我还尝试了foundPost.voctors.remove,但结果是一样的。还尝试了votters.findOne,但查询始终返回null


任何帮助都将不胜感激。

首先使用
id
方法查找投票人,然后将其删除,最后保存文档以应用更改:

var voter = foundPost.voters.id(req.payload._id).remove();
foundPost.save(function (err) {
  if (err) return handleError(err);
  console.log('the voter was removed')
});

思想列车是对的,谢谢!我还必须改变Voter模型中的VoTyrID变量,但是现在它工作了。当然,也可以考虑子文档CRUD操作的快速浏览: