如何修复猫鼬上的"Can't use $set"错误



我正在使用具有给定模式的猫鼬:

const StockSchema = new mongoose.Schema(
{
"materialDefinition_id": {
"type": "ObjectId",
"ref": "MaterialDefinition",
"required": true
},
"quantity": {
"type": "Number",
"required": true
},
"committedOrder_id": {
"type": "ObjectId",
"ref": "Order"
},
"committedOrderItemIndex": {
"type": "Number"
},
"detachedOrder_id": {
"type": "ObjectId",
"ref": "Order"
},
"detachedOrderItemIndex": {
"type": "Number"
},
"deletedAt": {
"type": "Number"
},
"createdAt": {
"type": "Number"
},
"updatedAt": {
"type": "Number"
}
});

我在以下交易中出错:

try {
await StockModel.update(
{
$or: [
{ committedOrder_id: purchaseOrder._id },
{ detachedOrder_id: purchaseOrder._id }
]
},
{
$set: {
committedOrder_id: null,
committedOrderItemIndex: null,
detachedOrder_id: null,
detachedOrderItemIndex: null
}
}
);
} catch (err) {
console.log("Error updating stock!");
console.log(err);
}

错误:

Error updating stock!
Error: Can't use $set
at ObjectId.SchemaType.castForQuery (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/schematype.js:1368:13)
at ObjectId.SchemaType.castForQueryWrapper (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/schematype.js:1347:17)
at cast (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/cast.js:288:39)
at model.Query.Query.cast (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/query.js:4644:12)
at model.Query.Query._castConditions (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/query.js:1842:10)
at model.Query.<anonymous> (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/query.js:2097:8)
at model.Query._wrappedThunk [as _findOne] (/Users/workspace/dev/app/dev/node_modules/mongoose/lib/helpers/query/wrapThunk.js:16:8)
at /Users/workspace/dev/app/dev/node_modules/kareem/index.js:369:33
at processTicksAndRejections (internal/process/task_queues.js:75:11)

有什么解决办法吗?

从文档中,update在文档对象上执行,请参阅document.prototype.update

你可以试试这个:

await StockModel.findOneAndUpdate({
$where: { $or: [{ committedOrder_id: purchaseOrder._id }, { detachedOrder_id: purchaseOrder._id }] },
$set: {
committedOrder_id: null,
committedOrderItemIndex: null,
detachedOrder_id: null,
detachedOrderItemIndex: null
}
});

最新更新