gpt4 book ai didi

javascript - 如何从 Mongodb 中删除数组元素

转载 作者:行者123 更新时间:2023-11-30 19:01:15 25 4
gpt4 key购买 nike

我是 MEAN 堆栈的新手。我正在尝试实现 thisthis .我正在使用 $pull。但他们不工作可能是因为我在 mongodb 中的结构与他们的不同。那么让我首先向您展示:

enter image description here

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:现在让articleIddownvoter id 硬编码。稍后我会让它们动态化。

最佳答案

upvotersdownvoters 都是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com