Как исправить ошибку «Не могу использовать $ set» на Mongoose - PullRequest
0 голосов
/ 03 марта 2020

Я использую mon goose с данной схемой:

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)

Есть идеи как это исправить?

1 Ответ

1 голос
/ 03 марта 2020

Из документации 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
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...