#mongodb
#mongodb
Вопрос:
У меня проблема, когда я ищу документы с помощью платформы агрегации, и в одном документе для поля «place» установлено значение null. Как таковой, он не возвращается из базы данных с моим текущим кодом. Мой код:
router.get("/search", async (req, res) => {
const items = await Item.aggregate([
{
$lookup: {
from: "places",
localField: "place",
foreignField: "_id",
as: "placeData",
},
},
{
$unwind: "$placeData",
},
{
$match: {
$or: [
{ title: new RegExp(req.query.searchQuery, "i") },
{ sku: new RegExp(req.query.searchQuery, "i") },
{ "place.title": new RegExp(req.query.searchQuery, "i") },
],
},
},
{
$project: {
title: 1,
sku: 1,
place: {
$ifNull: ["$placeData", "Digital"],
},
},
},
]);
res.send(items);
});
Комментарии:
1. Я думаю, что это сделано специально. Вы действительно хотите хранить значения null в БД? Я думаю, вы должны выполнить проверку на нуль в службе, которая использует это?
2. У меня есть коллекция элементов, где некоторые элементы могут быть цифровыми или нет. если оно цифровое, место равно нулю
3. Вы можете указать несколько условий объединения с
$lookup
альтернативным синтаксисом.
Ответ №1:
Я понял это. Я немного изменил этап «размотки» следующим образом:
{
$unwind: {
path: "$placeData",
preserveNullAndEmptyArrays: true,
},
},