作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 MEAN 堆栈的新手。我正在尝试实现 this和 this .我正在使用 $pull
。但他们不工作可能是因为我在 mongodb 中的结构与他们的不同。那么让我首先向您展示:
downvoters
是一个字符串数组,其中包含对特定文章投反对票的用户 ID。假设 downvoters[2]
上的人,即 53et853rf
后来对这篇文章投了赞成票。那么他的用户 ID 应该从 downvoters 列表中删除。这是我的代码:
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
数组,因此您的 Mongoose 架构应如下所示:
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));
关于javascript - 如何从 Mongodb 中删除数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59493139/
我是一名优秀的程序员,十分优秀!