任务从MongoDb、Mongoose中删除数组中的所有蓬松对象



我在文档中的属性之一是一个数组,它充满了漂亮的蓬松对象。现在我想擦除所有具有特定范围的对象->qdate: 20210225。

db属性被称为weeks,看起来像这样:

[
{
"time": [
"06",
"00"
],
"active": false,
"reason": "",
"bookTime": "202102250600",
"qdate": 20210225,
"booked": false
},
{
"time": [
"06",
"15"
],
"active": false,
"reason": "",
"bookTime": "202102250615",
"qdate": 20210225,
"booked": false
},
{
"time": [
"06",
"30"
],
"active": false,
"reason": "",
"bookTime": "202102250630",
"qdate": 20210225,
"booked": false
},
{
"time": [
"06",
"45"
],
"active": false,
"reason": "",
"bookTime": "202102250645",
"qdate": 20210225,
"booked": false
},
{
"time": [
"07",
"00"
],
"active": false,
"reason": "",
"bookTime": "202102250700",
"qdate": 20210225,
"booked": false
},
{
"time": [
"07",
"15"
],
"active": false,
"reason": "",
"bookTime": "202102250715",
"qdate": 20210225,
"booked": false
},
{
"time": [
"08",
"00"
],
"active": true,
"reason": "",
"bookTime": "202102250800",
"qdate": 20210225,
"booked": false
},
{
"time": [
"08",
"15"
],
"active": true,
"reason": "",
"bookTime": "202102250815",
"qdate": 20210225,
"booked": false
},
{
"time": [
"08",
"30"
],
"active": true,
"reason": "",
"bookTime": "202102250830",
"qdate": 20210225,
"booked": false
},
{
"time": [
"08",
"45"
],
"active": true,
"reason": "",
"bookTime": "202102250845",
"qdate": 20210225,
"booked": false
},
{
"time": [
"09",
"00"
],
"active": true,
"reason": "",
"bookTime": "202102260900",
"qdate": 20210226,
"booked": false
},
]

我可以删除其中一个蓬松的对象,但其他的不会去。我在不同的组合中尝试过类似的东西。

const company = await Company.updateMany(
{ email: 'test@gmail.com' },
{ $pullAll: [{ 'weeks.qdate': 20210225 }] },
(err, data) => {
if (err) console.log(err);
}
);
const company = await Company.updateMany(
{ email: 'test@gmail.com' },
{ $pullAll: [{ 'weeks': { $elemMatch: { qdate: 20210225 } } }] },
(err, data) => {
if (err) console.log(err);
}
);

我知道,从一个查询我只能拉一个发生,所以我只能找到一个对象与绒毛值qdate:20210225,为了得到所有我写了一个聚合管道,但我不能完全删除对象,我可以只是替换值。

有好心人来帮我吗?

看起来$pull可以解决你的问题:

$pull操作符从现有数组中删除所有符合指定条件的一个或多个值的实例。

下面的代码可能会有所帮助:

const company = await Company.updateMany(
{ email: 'test@gmail.com' },
{ $pull: { weeks: { qdate: 20210225 } } },
...
);

最新更新