【问题标题】:Mission delete all fluffy objects in array from MongoDb, Mongoose任务从 MongoDb、Mongoose 中删除数组中的所有蓬松对象
【发布时间】:2021-05-27 14:55:51
【问题描述】:

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

db 属性被称为周,如下所示:

[
    {
        "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 蓬松值的对象,以便获得所有我写的聚合管道但我不能完全删除该对象我可以替换值。

这里有好心人来帮我吗?

【问题讨论】:

标签: javascript mongodb mongoose mongodb-query


【解决方案1】:

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

$pull 运算符从现有数组中删除一个或多个与指定条件匹配的值的所有个实例。

以下代码可能会有所帮助:

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

【讨论】:

  • 嘿,谢谢。我确定我以前也尝试过,但我现在看到无论删除多少项目,我都会得到 nModified:1。我预计 n 计数更高。当我现在检查数据库时,我看到您提出的查询有效。谢谢
猜你喜欢
  • 2016-03-16
  • 2018-08-13
  • 2016-10-28
  • 2021-04-01
  • 2021-07-27
  • 2013-03-16
  • 1970-01-01
相关资源
最近更新 更多