我在文档中的一个属性是一个数组,里面填充了漂亮的毛绒对象。现在我想要擦除所有具有特定范围-> 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的对象,为了得到我写的所有内容,我写了一个聚合管道,但在那里我不能完全删除对象,我只能替换这些值。
有没有好心人来帮我?
发布于 2021-02-25 17:16:09
看起来像$pull将解决您的问题:
$pull运算符从现有数组中删除全部与指定条件匹配的一个或多个值的实例。
下面的代码可能会有所帮助:
const company = await Company.updateMany(
{ email: 'test@gmail.com' },
{ $pull: { weeks: { qdate: 20210225 } } },
...
);
https://stackoverflow.com/questions/66365283
复制相似问题