当前位置: 首页 > 面试题库 >

猫鼬删除文档中的数组元素并保存

甄永年
2023-03-14
问题内容

我的模型文档中有一个数组。我想根据我提供的密钥删除该数组中的元素,然后更新MongoDB。这可能吗?

这是我的尝试:

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var favorite = new Schema({
    cn: String,
    favorites: Array
});

module.exports = mongoose.model('Favorite', favorite, 'favorite');

exports.deleteFavorite = function (req, res, next) {
    if (req.params.callback !== null) {
        res.contentType = 'application/javascript';
    }
    Favorite.find({cn: req.params.name}, function (error, docs) {
        var records = {'records': docs};
        if (error) {
            process.stderr.write(error);
        }
        docs[0]._doc.favorites.remove({uid: req.params.deleteUid});

        Favorite.save(function (error, docs) {
            var records = {'records': docs};
            if (error) {
                process.stderr.write(error);
            }
            res.send(records);

            return next();
        });
    });
};

到目前为止,它可以找到文档,但是删除或保存仍然有效。


问题答案:

您也可以直接在MongoDB中进行更新,而不必加载文档并使用代码对其进行修改。使用$pull$pullAll运算符从数组中删除项目:

Favorite.updateOne( {cn: req.params.name}, { $pullAll: {uid: [req.params.deleteUid] } } )

(您也可以将updateMany用于多个文档)

http://docs.mongodb.org/manual/reference/operator/update/pullAll/



 类似资料:
  • 问题内容: 我有以下猫鼬模式: 我想删除数组中的第二项,以获取以下信息: 以下代码按预期完成了工作: 但是,我需要基于ObjectId删除。并且以下行不通: 有什么建议?我一直将头撞在屏幕上(又名Google,Stackoverflow等),却没有运气。 问题答案: 似乎以上代码无法正常工作。对于我给出的第一个示例,它甚至都不起作用。 这是我的工作代码:

  • 问题内容: 以上似乎不起作用。记录仍然存在。 有人可以修复吗? 问题答案: 是一系列文档。所以它没有方法 您可以分别迭代和删除数组中的每个文档。 或-由于看起来您是通过(可能)唯一的id使用来查找文档的- 而不是。

  • 删除数组中的元素,直到传递的函数返回 true 。 返回数组中的其余元素。 循环访问数组,使用 Array.slice() 在数组中从第一个元素开始删除,直到函数的返回值为 true。 返回其余的元素。 const dropElements = (arr, func) => { while (arr.length > 0 && !func(arr[0])) arr = arr.slice(1)

  • 问题内容: 我在子文档的Mongoose中尝试执行findOne查询,但运气不佳… 我的架构如下所示: 我只需要从我使用此查询的文档中查找用户的电子邮件 任何帮助,将不胜感激! 问题答案: 您缺少对象的级别,因此您的代码需要更改为以下内容:

  • 这是我的代码: 我遇到的问题是,我在查询包含类< code>cgus_post的div时,返回的只是文本。我如何让它返回HTML元素?

  • 问题内容: 根据用户提交的内容,数组中的某些元素是空字符串。我需要删除那些元素。我有这个: 但这是行不通的。仍然有空元素。我也尝试过使用该功能,但是结果是一样的。 问题答案: 在处理字符串数组时,您可以简单地使用,它可以方便地为您处理所有这一切: 请记住, 如果未提供回调 ,则将删除所有等于(请参见转换为boolean)数组的条目。因此,如果您需要保留元素,即确切的string ,则需要一个自定义