gpt4 book ai didi

javascript - Mongoose - Model.deleteOne() 正在删除整个集合而不是单个文档

转载 作者:可可西里 更新时间:2023-11-01 09:47:44 28 4
gpt4 key购买 nike

我有一个包含客户数组的用户模型。我想根据 customer _id 删除特定客户。根据我在 Mongoose 文档中阅读的内容,我应该使用 Model.deleteOne 删除单个文档。

这是我的尝试

用户架构(为简洁起见已缩短):

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
username: {
type: String,
default: ''
},
password: {
type: String,
default: '',
},
registerDate: {
type: Date,
default: Date.now()
},
customer: [{
name: {
type: String,
default: '',
},
email: {
type: String,
default: 'No email name found'
},
fleet: [{
unitNumber: {
type: String,
default: 'N/A',
}
}]
}]
});

module.exports = mongoose.model('User', UserSchema);

下面是路由和 Controller :

const express = require('express');
const router = express.Router();

const customer_controller = require('../../controllers/customers');

router.delete('/customers/:custid', customer_controller.customer_remove);

module.exports = router;

最后是 Controller :

exports.customer_remove = (req, res) => {
const { params } = req;
const { custid } = params;

User.deleteOne({ 'customer._id': custid }, (err) => {
if (err)
throw err;
else
console.log(custid, 'is deleted');
});
};

根据我的想法,User.deleteOne({ 'customer.id': custid }) 会找到与 custid 匹配的 customer _id > 通过 req.params 传入。当我在 Postman 中测试这条路线时,它会删除找到客户的整个 User 集合,而不是仅仅删除客户。我能得到正确方向的插入吗?我觉得我离这里很近(或者不是哈哈)。

最佳答案

deleteOne 在文档级别操作,因此您的代码将删除第一个 User 文档,该文档包含一个 customer 元素和匹配的 _id.

相反,您希望更新 用户文档以使用$pullcustomer 数组字段中删除特定元素。 .从所有用户中删除客户:

User.updateMany({}, { $pull: { customer: { _id: custid } } }, (err) => { ...

关于javascript - Mongoose - Model.deleteOne() 正在删除整个集合而不是单个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52884532/

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