我在mongo DB中使用了一些带有moongooes的javascript代码来存储数据。有时我需要删除数组中的所有对象并获得一个干净的数组。
这是我架构
const orderSchema =new Schema({
date: {
type: Date,
},
OrderNumber: {
type: String,
required: true
},
City: {
type: String,
required: true
},
Address: {
type: String,
required: true
},
Phone: {
type: String
},
Country: {
type: String
},
Name: {
type: String,
required: true
},
Trackingnumber: {
type: String
},
ZipCode: {
type: Number
},
Province: {
type: String,
},
fulfillmentOrders:{
type: String,
},
Quantity: {
},
});
Holde:[
orderSchema
],
module.exports = mongoose.model('User', userSchema);
我在蒙戈的数据看起来像这样
"Holde": [
{
"OrderNumber": "gid://shopify/Order/4958122475753",
"City": "xxxx",
"Address": "xxxx",
"Phone": "",
"Country": "xxx",
"Name": "xxx",
"Trackingnumber": "0",
"ZipCode": xxxx,
"fulfillmentOrders": "gid://shopify/FulfillmentOrder/6034089509097",
"Quantity": [
{
"quantity": 1,
"product": {
"id": "gid://shopify/Product/7909915590889"
},
"variant": {
"sku": "11111"
}
}
],
"_id": {
"$oid": "6389b12faaade0788141bf4f"
}
我尝试用这段代码删除数组中的所有对象
const User = require('../model/User');
const foundUse= await User.findOne({ "user":req.body.user}).exec();
await foundUse.updateOne({
Holde :{
$pull: {'_id':6389b12faaade0788141bf4f},
}
},
)
并期望得到“保持”:[]但实际上我得到
"Holde": [
{
"_id": {
"$oid": "6389d882afbc458cc1c1af23"
}
}
],
1条答案
按热度按时间ddrv8njm1#
这是很正常的,因为你正在更新您的用户与这些数据.
对于mongoose,正确删除项的方法是.deleteMany(),但在您的情况下,它只删除用户(您似乎只想删除订单)。然后,您可以过滤用户的订单,并使用FindOneAndUpdate重新分配它,而不删除找到的订单,如下所示:
其中HOLD_ID_TO_DELETE是要删除的id(此时您似乎传递了带有所有订单的整个用户对象)
但是,创建一个
Order
系列,使用ref链接到您的User
系列,会更漂亮,更容易维护。