Mongoose .pull не удаляет вложенный документ - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь удалить продукт из категории, используя mongoose .remove из этих других вопросов, но, похоже, ни один из них не работает

Удалить поддокумент из Mongo с помощью mongoose

Но ничего не происходит, и я получаю только то же самое неотредактированное

Схема категории

const mongoose = require('mongoose');

const Schema = mongoose.Schema;
const Product = require('./Product');

const CategorySchema = Schema({
  _id: Schema.Types.ObjectId,
  categoryName: {
    type: String,
    required: true,
  },
  categoryDescription: String,
  productList: [Product],
});

mongoose.model('Category', CategorySchema);

Схема продуктов

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const ProductSchema = Schema({
  productName: {
    type: String,
    required: true,
  },
  productDescription: String,
  categories: { type: Schema.Types.ObjectId, ref: 'Category' },
});

mongoose.model('Product', ProductSchema);

Мой экспресс-маршрут для обработки удаленияПоддокумента

app.delete('/api/category-with-product/:categoryId', (req, res) => {
    const categoryId = req.params.categoryId;
    const { productId } = req.body;

    Category.findById(categoryId)
      .then((category) => {
        category.productList.pull({ _id: productId });
        return category.save();
      })
      .then((newCategory) => {
        res.send(newCategory);
      });
  });

Мой ожидаемый результат заключается в том, чтобы просто удалить продукт из массива productList

{
  _id: 5c5b990d56b3f61ce3736e6f,
  categoryName: 'A new category name',
  description: 'description',
  productList:[
     { _id: 5c6e4b5114333b25f8e9d737,
       productName: 'test',
       productDescription: 'test'
     } 
  ],
}

1 Ответ

0 голосов
/ 22 февраля 2019

Не могли бы вы попробовать это:

const ObjectId = mongoose.Types.ObjectId;
function funcName() {
    return new Promise((resolve, reject) => {
      db.category.update(
           { },
           { $pull: { productList: { _id: ObjectId(productId) } } },
           { multi: true }
      )
        .then((result) => resolve())
        .catch((err) => reject(err));
    });
  }

Вы также можете попробовать Async / Await во время операций с базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...