数组中的 Node.js/mongoose - sub-document 不会 delete/remove
Node.js/mongoose - sub-document in a array won't delete/remove
这是我完成在线训练营后的第一个 on-my-own node.js 项目。 运行 在我的数组中删除 sub-doc 时遇到问题。这是一些代码,我希望我能提供足够的信息让别人帮助我。
models:
var productSchema = new mongoose.Schema({
name: String,
type: String,
location: String
});
var clientSchema = new mongoose.Schema({
name: String,
address: String,
contactinfo: String,
products:[]
});
这是我的 post 将产品添加到客户端的路线,效果很好:
//Add New Product
app.post("/clients/:id/products", middleware.isLoggedIn, function(req, res){
Client.findById(req.params.id, function(err, client) {
if(err){
console.log(err);
req.flash('error', "We cannot find the Client!!!");
return res.redirect("/clients/" + req.params.id + "/products/new");
}
Product.create(req.body.product, function(err, product){
if(err){
req.flash('error', "There was an error adding the product to the user, try again");
} else{
client.products.push(product);
client.save();
req.flash('success', "You have added a New Product");
res.redirect('/clients/' + req.params.id +'/products/new');
}
});
});
});
我的删除路由是我的问题child。它删除了产品,但我似乎根本无法将其从阵列中取出。我做了一些研究并尝试了以下方法:
client.products.find({_id:req.params.product_id}).remove()
client.products.id(req.params.product_id).remove()
client.products.pull({_id: req.params.product_id})
client.find({products:{_id: req.params.product_id}}).remove()
using client.save() right after each
我遇到错误或它删除了客户端,
但从不从数组中删除产品。任何帮助都会很棒,或者如果有更好的方法来做到这一点,那也很棒。在寻求帮助之前尝试了一个星期,因此欢迎熟练的开发人员提供反馈。
哦,这是我的最后一条删除路线,我想在找到修复之前我会禁用它,这样我就可以继续我的项目了。
//Delete a Product
app.delete("/clients/:id/products/:product_id", middleware.isLoggedIn, function(req, res){
Product.findByIdAndRemove(req.params.product_id, function(err){
if(err){
console.log(err);
} else {
console.log("Should be deleted now!");
Client.findById(req.params.id, function(err, client) {
if(err){
console.log(err);
}
console.log(client.products.length);
client.find({products: {_id: req.params.product_id}}).remove();
client.save();
console.log(client.products.length);
res.redirect("/clients/");
});
}
});
});
我用来查看是否有任何变化的长度,但它从未改变过。
首先,您的方法需要 objectID
。像这样尝试,看看它是否有效:
Product.findByIdAndRemove(ObjectId(req.params.product_id)
没关系,看来这里的问题是我的代码。我没有在客户端模式中为产品数组推送 ref,而是直接在数组中推送产品信息。然后在我的应用程序的一个区域中,我正在访问产品集合中的数据,但在我的应用程序的另一部分中,我通过产品数组从客户端集合中访问相同的信息。根据我的培训(我创建的其他课程应用程序),似乎 ref 没有被删除它只是不能引用集合,因为它不再在集合中。
感谢 Laurentiu 和 Federico 查看此内容并提供一些有用的信息。对于这可能给您带来的任何麻烦,我们深表歉意。
查看文档,不会删除。它删除的是内容而不是 ID,因此它保留在 MongoDB 数据库中。
router.delete('/inventario/:_id', function(req, res){
Propiedades.findByIdAndDelete(req.params._id, function(err,){
if (err){
res.redirect('/inventario/');
} else {
res.redirect('/inventario/');
}
})
});
这是我完成在线训练营后的第一个 on-my-own node.js 项目。 运行 在我的数组中删除 sub-doc 时遇到问题。这是一些代码,我希望我能提供足够的信息让别人帮助我。
models:
var productSchema = new mongoose.Schema({
name: String,
type: String,
location: String
});
var clientSchema = new mongoose.Schema({
name: String,
address: String,
contactinfo: String,
products:[]
});
这是我的 post 将产品添加到客户端的路线,效果很好:
//Add New Product
app.post("/clients/:id/products", middleware.isLoggedIn, function(req, res){
Client.findById(req.params.id, function(err, client) {
if(err){
console.log(err);
req.flash('error', "We cannot find the Client!!!");
return res.redirect("/clients/" + req.params.id + "/products/new");
}
Product.create(req.body.product, function(err, product){
if(err){
req.flash('error', "There was an error adding the product to the user, try again");
} else{
client.products.push(product);
client.save();
req.flash('success', "You have added a New Product");
res.redirect('/clients/' + req.params.id +'/products/new');
}
});
});
});
我的删除路由是我的问题child。它删除了产品,但我似乎根本无法将其从阵列中取出。我做了一些研究并尝试了以下方法:
client.products.find({_id:req.params.product_id}).remove()
client.products.id(req.params.product_id).remove()
client.products.pull({_id: req.params.product_id})
client.find({products:{_id: req.params.product_id}}).remove()
using client.save() right after each
我遇到错误或它删除了客户端,
但从不从数组中删除产品。任何帮助都会很棒,或者如果有更好的方法来做到这一点,那也很棒。在寻求帮助之前尝试了一个星期,因此欢迎熟练的开发人员提供反馈。
哦,这是我的最后一条删除路线,我想在找到修复之前我会禁用它,这样我就可以继续我的项目了。
//Delete a Product
app.delete("/clients/:id/products/:product_id", middleware.isLoggedIn, function(req, res){
Product.findByIdAndRemove(req.params.product_id, function(err){
if(err){
console.log(err);
} else {
console.log("Should be deleted now!");
Client.findById(req.params.id, function(err, client) {
if(err){
console.log(err);
}
console.log(client.products.length);
client.find({products: {_id: req.params.product_id}}).remove();
client.save();
console.log(client.products.length);
res.redirect("/clients/");
});
}
});
});
我用来查看是否有任何变化的长度,但它从未改变过。
首先,您的方法需要 objectID
。像这样尝试,看看它是否有效:
Product.findByIdAndRemove(ObjectId(req.params.product_id)
没关系,看来这里的问题是我的代码。我没有在客户端模式中为产品数组推送 ref,而是直接在数组中推送产品信息。然后在我的应用程序的一个区域中,我正在访问产品集合中的数据,但在我的应用程序的另一部分中,我通过产品数组从客户端集合中访问相同的信息。根据我的培训(我创建的其他课程应用程序),似乎 ref 没有被删除它只是不能引用集合,因为它不再在集合中。
感谢 Laurentiu 和 Federico 查看此内容并提供一些有用的信息。对于这可能给您带来的任何麻烦,我们深表歉意。
查看文档,不会删除。它删除的是内容而不是 ID,因此它保留在 MongoDB 数据库中。
router.delete('/inventario/:_id', function(req, res){
Propiedades.findByIdAndDelete(req.params._id, function(err,){
if (err){
res.redirect('/inventario/');
} else {
res.redirect('/inventario/');
}
})
});