我的模型文档中有一个数组。我想根据我提供的密钥删除该数组中的元素,然后更新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 ,则需要一个自定义