gpt4 book ai didi

javascript - 给定此模型,如何使用 updateOne (mongoose) 删除嵌套数组项?

转载 作者:行者123 更新时间:2023-12-04 15:33:10 25 4
gpt4 key购买 nike

我正在尝试使用“updateOne”方法删除数组项,但我的查询与我拥有的模型结构中的正确记录不匹配。给定一封电子邮件,我想找到包含所提供电子邮件的数组项并将其拉出,将其删除。 (不存在具有相同电子邮件的数组项)

我的模型是这样的:

var mongoose = require('mongoose');

var teamMemberModelSchema = new mongoose.Schema({
_id: false,
"email": {
"type": String,
"required": true,
"minlenght": 5,
"maxheight": 50
},
"name": {
"type": String,
"required": true,
"minlenght": 5,
"maxheight": 256
},
"role": {
"type": String,
"required": true,
"minlenght": 20,
"maxheight": 256
},
"twitter": {
"type": String,
"required": true,
"minlenght": 1,
"maxheight": 100
},
"facebook": {
"type": String,
"required": true,
"minlenght": 1,
"maxheight": 100
},
"linkedin": {
"type": String,
"required": true,
"minlenght": 1,
"maxheight": 100
},
});

var teamModelSchema = new mongoose.Schema({
"title": {
"type": String,
"required": true,
"minlenght": 5,
"maxheight": 20
},
"headline": {
"type": String,
"required": true,
"minlenght": 5,
"maxheight": 30
},
"description": {
"type": String,
"required": true,
"minlenght": 5,
"maxheight": 80
},
"members": [teamMemberModelSchema]
}, { collection: 'team' });

teamModelSchema.set('collection', 'team');
mongoose.model('team', teamModelSchema)

我正在尝试的方法如下:

module.exports.removeMember = function (req, res) {
const email = req.params.email;
const query = { "members.email": email };
const pull = { $pull: { "members.$.email": email } };

try {
var message = teamMsg.teamMemberRemoveSuccess;

TeamModel.updateOne(query, pull);

responseUtilities.sendJSON(res, false, { message: message });
} catch (err) {
console.log(err.message);
responseUtilities.sendJSON(res, err, { message: err.message });
}
};

它执行没有错误,但没有更新。

我已经用“FindOneAndUpdate”和“FindOneAndRemove”尝试了其他一些替代方案,但是我找不到解决方案。

有什么想法吗?

最佳答案

您可以使用 findOneAndUpdate$pull 运算符来完成此任务。

要从文档数组中删除项目,您可以查看 MongoDb docs

您需要使用awaitthen block 来查询。我使用 await,并通过添加 async 关键字使函数异步。我们还需要空查询对象。

我还添加了 new: true 选项,以返回更新的对象以检查项目是否被删除。

你需要处理没有文档匹配的情况,我给你加了一个TODO。

module.exports.removeMember = async function(req, res) {
const email = req.params.email;
const query = {};

const pull = {
$pull: {
members: {
email: email
}
}
};

const options = {
new: true
};

try {
var message = teamMsg.teamMemberRemoveSuccess;

const result = await TeamModel.updateOne(query, pull, options);

console.log(result);

if (!result) {
//TODO: return 400-Bad Request or 404 - Not Found
} else {
responseUtilities.sendJSON(res, false, { message: message });
}
} catch (err) {
console.log(err.message);
responseUtilities.sendJSON(res, err, { message: err.message });
}
};

关于javascript - 给定此模型,如何使用 updateOne (mongoose) 删除嵌套数组项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60679119/

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