繁体   English   中英

如何从 Mongodb 中删除数组元素

[英]How to remove an array element from Mongodb

我是 MEAN 堆栈的新手。 我正在尝试实现thisthis 我正在使用$pull 但它们不起作用可能是因为我在 mongodb 中的结构与他们的不同。 所以让我首先告诉你:

在此处输入图片说明

downvoters是一个字符串数组,其中包含对该特定文章投反对票的用户 ID。 让我们说downvoters[2]上的人,即53et853rf后来upvoted这篇文章。那么他的用户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()是一个异步操作,需要作为 Promise awaited或处理,因此:

let opResult = await Article.update(
    {articleid: '5p4aqbryi'},
    { $pull: { downvoters: '53et853rf' } }
);

或者

Article.update(
        { articleid: '5p4aqbryi' },
        { $pull: { downvoters: '53et853rf' } }
    ).then(opResult => console.log(opResult));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM