У меня есть две модели - продукт и дизайн. Продукт имеет поле проектирования, которое принимает объект ObjectId.Запрос Mongoose для нулевого населения
Иногда, однако, при сохранении в MLAB дБ, дизайн не заканчивается экономии, но по-прежнему возвращает ObjectId, чтобы сохранить продукт, поэтому для некоторых продуктов, когда я запрашиваю
Product.find({...});
я вернусь продукт .design = someObjectId;
Но когда я заселить:
Product.find({...}).populate('design');
в результате product.design имеет нулевое значение, что имеет смысл. Теперь мне нужно исправить его. Я делаю запрос по всем Продуктам, заполняя «дизайн», а затем повторяя каждый продукт, чтобы увидеть, если его дизайн продукта === null, но с более чем 50 тыс. Документами продукта в db, я бы предпочел написать больше конкретный запрос, так:
Какой запрос мне нужно выполнить для возврата только продуктов с полями дизайна, которые заполняются до нуля?
Nope! поле дизайна уже заполнено ObjectId, оно просто не связано с существующим документом. Запуск Product.find ({design: ""}) возвращает [] –
Все еще нет. Подумайте об этом так: затронутый продукт, когда я просто запускаю Product.find ({...}), выглядит так: {_id: 56902c2263b132b0976c14ad, создано: 2016-03-23T23: 07: 19.759Z, design: 5660effabb790c22059a4114} Но когда я запускаю Product.find ({...}). Populate ('design'), я возвращаюсь: {_id: 56902c2263b132b0976c14ad, создано: 2016-03-23T23: 07: 19.759Z, design: null} Потому что нет дизайна с этим ObjectId. Но в исходном запросе продукт все еще имеет поле дизайна. Поэтому проверка наличия {$ существует: false, $ ne: ""} не работает. –
Есть ли причина, по которой вы не могли попытаться заполнить все документы, а затем запустить второй запрос, чтобы увидеть, какие документы имеют поле дизайна, равное null, а затем сделать ваши обновления там? Я не могу придумать лучший способ обработки, но у кого-то может быть лучшее решение. – user2263572