Javascript 从Mongoose中的嵌套数组中删除元素
我正在使用MongoDB和Node.JS开发一个upvoting/downvoting应用程序 我创建了两个相互关联的模式: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
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操作的快速浏览: