具有多个条件的 Mongoose updateMany() 返回 0
Posted
技术标签:
【中文标题】具有多个条件的 Mongoose updateMany() 返回 0【英文标题】:Mongoose updateMany() with multiple conditions returns 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`
);
【问题讨论】:
【参考方案1】:查询
catering:
status: 1,
,
仅当 catering
字段包含的文档正好有 1 个字段,该字段名为 status
并且值为 1 时才会匹配。如果有任何其他字段,则匹配将失败。
要检查状态字段的值而不考虑餐饮对象中的任何其他字段,请使用点分表示法:
"catering.status":1
【讨论】:
以上是关于具有多个条件的 Mongoose updateMany() 返回 0的主要内容,如果未能解决你的问题,请参考以下文章
$match mongodb聚合框架_mongoose中的多条件[重复]