所以我的mongodb看起来像这样:
[
{
"_id": "582bc918e3ff1bf021ae8b66",
"boardName": "Test Board",
"created_at": 1479264483957,
"__v": 0,
"person": [
{
"name": "Steve",
"wins": 1001,
"losses": 20,
"_id": "582bc918e3ff1bf021ae8b69"
},
{
"name": "Bobby",
"wins": 500,
"losses": 54,
"_id": "582bc918e3ff1bf021ae8b68"
},
{
"name": "Sarah",
"wins": 396,
"losses": 675,
"_id": "582bc918e3ff1bf021ae8b67"
}
]
}
]
我希望能够发出删除请求:
/api/scoreBoard/person/:person_id
然后它应该删除我数据库中的整个person元素。
例如,如果我删除:
http://localhost:3000/api/scoreBoard/person/582bc918e3ff1bf021ae8b68
然后它应该删除" bobby"。之后数据库看起来像这样:
[
{
"_id": "582bc918e3ff1bf021ae8b66",
"boardName": "Test Board",
"created_at": 1479264483957,
"__v": 0,
"person": [
{
"name": "Steve",
"wins": 1001,
"losses": 20,
"_id": "582bc918e3ff1bf021ae8b69"
},
{
"name": "Sarah",
"wins": 396,
"losses": 675,
"_id": "582bc918e3ff1bf021ae8b67"
}
]
}
]
但是如何删除内部人员#34;?我无法让它发挥作用。到目前为止,这是我的代码,它会返回"成功删除的人!"但数据库中没有任何反应。它不会删除任何内容。
app.delete('/api/scoreBoard/person/:person_id', function(req, res) {
mongoose.model('scoreBoard').findByIdAndRemove(req.params.person_id, function(err) {
if(!err) {
res.json('Deleted person successfuly!');
} else {
res.write('Delete failed..');
}
});
});
答案 0 :(得分:1)
由于您似乎使用的是Mongoose,我建议您使用refs和单独的Person模型来存储此信息,这看起来像:
记分板:
const mongoose = require('mongoose');
var Schema = mongoose.Schema;
var scoreboardSchema = new Schema({
boardName: String,
created_at: Date,
people: [{type: Schema.Types.ObjectID, ref:"Person"}]
});
人:
const mongoose = require('mongoose');
var Schema = mongoose.Schema;
var personSchema = new Schema({
name: String,
wins: Number,
losses: Number
});
当您想要将用户添加到记分板时,您只需要将他们的ID推送到阵列人员。
然后当你想删除一个人时,你可以使用:
db.Scoreboard.people.pull(req.params.person_id);
如果您沿着这条路走下去,那么当您抓住记分牌时,您需要填充人员,以便看起来像:
Scoreboard.find({}).populate('people').exec(function(err,docs){})
例如。这样可以让您在Person对象上获得更多自由,例如添加更多属性并能够更轻松地编辑它们。
希望这有点帮助。
答案 1 :(得分:0)
您需要使用更新,因为您不想删除整个文档。
这样的事情应该有效。
mongoose.model('scoreBoard')
.update({
_id: <boardID>
},{
$pull: { person: { _id: <personID}}
}, function(err, result){
});
答案 2 :(得分:0)
app.delete('/api/scoreBoard/person/:person_id', function(req, res) {
mongoose.model('scoreBoard').findAndUpdate({'person._id':req.params.person_id},{$pull : {person : {_id : req.params.person_id}}}, function(err) {
if(!err) {
res.json('Deleted person successfuly!');
} else {
res.write('Delete failed..');
}
});
});