Javascript Mongoose-Model.deleteOne()正在删除整个集合,而不是单个文档
我有一个包含一系列客户的用户模型。我想根据Javascript Mongoose-Model.deleteOne()正在删除整个集合,而不是单个文档,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我有一个包含一系列客户的用户模型。我想根据客户id删除特定客户。根据我在Mongoose文档中读到的内容,我应该使用Model.deleteOne删除单个文档 这是我的尝试 用户模式(为简洁起见,已缩短): 以下是路线和控制器: const express = require('express'); const router = express.Router(); const customer_controller = require('../../controllers/customers'
客户id
删除特定客户。根据我在Mongoose文档中读到的内容,我应该使用Model.deleteOne
删除单个文档
这是我的尝试
用户模式(为简洁起见,已缩短):
以下是路线和控制器:
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;
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');
});
};
最后,控制器:
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;
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})
将找到与通过req.params
传入的custid
匹配的custid
。当我在Postman中测试此路由时,它会删除客户所在的整个User
集合,而不仅仅是删除客户。我能在正确的方向上轻推一下吗?我觉得我离这里很近(或者不是lol)。deleteOne
在文档级别运行,因此您的代码将删除第一个用户
文档,该文档包含一个客户
元素和一个匹配的\U id
相反,您希望使用更新用户文档以从customer
数组字段中删除特定元素。要从所有用户中删除客户,请执行以下操作:
User.updateMany({}, { $pull: { customer: { _id: custid } } }, (err) => { ...
使用Mongoose,您可以执行以下操作:
model.findOneAndUpdate({ 'customer._id': custid }, {$pull: { $pull: {
customer: { _id: custid } }}, {new: true}).lean();
删除子文档
默认情况下,每个子文档都有一个_id。Mongoose文档数组有一种特殊的id方法,用于搜索文档数组以查找具有给定id的文档
访问:
parent.children.id(_id).remove() 谢谢大家!!看起来我还误解了文档和元素的确切含义。在回调参数中,我尝试按如下方式返回用户(err,user)=>{能够按照我的需要实现和工作。如果您不介意,我还有一个问题。在回调中,我尝试按如下方式返回用户:
(err,user)=>{res send(user)}
并确实返回了数据,但它不是用户集合。在我的更新路由中,我能够在Model.update()
的回调中返回user
。这对Model.updateMany()有不同的做法吗
?@maison.m既不update
也不updateMany
向回调提供更新的文档。如果需要该功能,请参阅findOneAndUpdate
。