Как выполнить вложенное условие для массива объекта в $lookup Mongoose

#mongodb #mongoose #mongoose-schema

#mongodb #мангуст #mongoose-схема

Вопрос:

У меня есть два документа, как показано ниже

 A = {
    _id: <MongoDb ObjectId>
    user: {
        type: ObjectId,
        ref: 'users'
    }
    .... <other property>
}

B = {
    _id: <MongoDB ObjectId>
    a: {
        type: mongoose.Schema.Types.ObjectID
        ref: 'a'
    },
    content: [
        {
            status: {
                c: String
            }
        }
    ]
}
  

Мне нужно получить подробную информацию, включая b, где содержимое может быть пустым или статусным.c === ‘готово’ для пользователя.
Данные A должны содержаться в результате, b может быть пустым, если условие не выполняется

Я использую метод adapt ниже, но не могу получить желаемый результат

 A.aggregate([
    {
        $match: {$expr: { $and: [ { user: <SomeDefinedID>} ]}}
    },
    {
        $lookup: {
            from: "b",
            localField: "_id",
            foreignField: "a",
            as: 'b'
        }
    },
    {
        $unwind: "$b"
    },
    {
        $match: {$expr: { $and: [ { $eq: [ "$b.content.status.c", "done" ] } ]}}
    },
]).exec(console.log);
  

Иногда я получал пустой массив, хотя у меня есть запись в A, b может быть [] или результат ‘c’ как ‘done’.