【问题标题】:Mongoose updateMany() with multiple conditions returns 0具有多个条件的 Mongoose updateMany() 返回 0
【发布时间】:2020-12-16 05:10:10
【问题描述】:

我创建了一个服务来更新我的所有{bookings},并在{booking.date} 过去时将bookings.status 值设置为4(已完成)。 现在我需要更新另一个值{booking.catering.state} 并将其设置为2(拒绝)当它的初始状态是1(请求)并且booking.date 是过去.

我的代码(第一个片段运行良好),第二个没有。也许问题是由第二个 updateMany() 的多重条件引起的。但是,{caterings.nModified} 始终返回 0。我错过了什么?。 :

// UPDATE BOOKIGNS WITH PAST DATE OR TODAYS DATE AND PAST HOURS
    const bookings = await Booking.updateMany(
      {
        $or: [
          { date: { $lt: today } },
          { date: today, end: { $lt: now.getHours() } },
        ],
      },
      // SET STATE TO "FINISHED"
      { status: 4 }
    );

// UPDATE CATERING, WHERE THE STATE IS "1" - REQUESTED
const caterings = await Booking.updateMany(
  {
    $or: [
      { date: { $lt: today } },
      { date: today, end: { $lt: now.getHours() } },
    ],
    catering: {
      status: 1,
    },
  },
  // SET CATERING STATE TO "DENIED"
  {
    catering: {
      status: 2,
    },
  }
);

  console.log(
      "\x1b[32m",
      `[manager]: ${bookings.nModified} bookings has been updated`
    );
    console.log(
      "\x1b[32m",
      `[manager]: ${caterings.nModified} caterings has been updated \n`
    );

【问题讨论】:

    标签: node.js json mongodb mongoose nosql


    【解决方案1】:

    查询

    catering: {
          status: 1,
        },
    

    仅当 catering 字段包含的文档正好有 1 个字段,该字段名为 status 并且值为 1 时才会匹配。如果有任何其他字段,则匹配将失败。

    要检查状态字段的值而不考虑餐饮对象中的任何其他字段,请使用点分表示法:

    "catering.status":1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-17
      • 2020-04-14
      • 2013-08-19
      • 1970-01-01
      • 2022-01-20
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多