我是MEAN Stack的新手。我想实现这个和这个。我正在使用$pull
。但是他们无法正常工作,也许是因为我在mongodb中的结构与他们的结构不同。因此,让我首先向您展示:
downvoters
是一个字符串数组,其中包含对该特定文章不满意的用户ID。假设某人(downvoters[2]
即53et853rf
后来的人)对本文进行了投票。然后,应将其用户名从投票者列表中删除。这是我的代码:
api.js
router.put('/update-upvotes', (req, res) => {
let articleData = req.body;
...
Article.update(
{articleid: '5p4aqbryi'},
{ $pull: { downvoters: '53et853rf' } }
);
Article.findOneAndUpdate(
{articleid: '5p4aqbryi'},
{upvotes: articleData.upvotes, upvoters: articleData.upvoters}, useFindAndModify=false,
(error, user) => {
if(error) {
...
}
else {
...
}
})
})
但是该ID不会被删除。控制台上没有错误或警告。请纠正我。
这是架构
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const articleSchema = new Schema({
articleid: String,
title: String,
content: String,
date: String,
contributor: String,
upvotes: Number,
upvoters: [],
downvotes: Number,
downvoters: []
})
module.exports = mongoose.model('article', articleSchema, 'articles');
PS:我们articleId
和downvoter id
现在进行硬编码。我将在以后使它们动态化。
这两个upvoters
和downvoters
是String
数组所以你的猫鼬的模式应该如下:
const articleSchema = new Schema({
articleid: String,
title: String,
content: String,
date: String,
contributor: String,
upvotes: Number,
upvoters: [String],
downvotes: Number,
downvoters: [String]
});
您还应该记住,这update()
是一个异步操作,需要awaited
作为Promise进行处理:
let opResult = await Article.update(
{articleid: '5p4aqbryi'},
{ $pull: { downvoters: '53et853rf' } }
);
要么
Article.update(
{ articleid: '5p4aqbryi' },
{ $pull: { downvoters: '53et853rf' } }
).then(opResult => console.log(opResult));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句