У меня есть две схемы, как следует
const CoconutImportSchema = new Schema({
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
farmerId: {
type: Schema.Types.ObjectId,
ref: 'Farmer'
},
settledOn: {
type: Date,
default: null
},
importedOn: {
type: Date,
default: Date.now()
}
},
{ toJSON: { virtuals: true } }
)
const FMoneyTransactionSchema = new Schema({
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
farmerId: {
type: Schema.Types.ObjectId,
ref: 'Farmer'
},
amount: {
type: Number,
required: true
},
date: {
type: Date,
default: Date.now()
},
settledOnImport: {
type: Schema.Types.ObjectId,
ref:'CoconutImport',
default:null
}
})
для каждой транзакции в CoconutImport может быть несколько записей в Fmonetrasanction. Если транзакция в FmoneyTransaction рассчитывается, тогда _id импортной транзакции будет присутствовать в поле урегулированногоOnImport.
У меня есть сценарий использования, в котором я должен получить детали импорта, а затем из коллекции FmoneyTransaction я должен получить все неурегулированные транзакции, т.е. Я также должен выложить данные фермера при импорте
await CoconutImports.aggregate([
{
$match: {
_id: Types.ObjectId(importId),
userId: Types.ObjectId(userId)
}
},
{
$lookup: {
from: FMoneyTransactions.collection.name,
"let": {
"farmerId": "$farmerId"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$$farmerId",
"$farmerId"
]
},
{
$eq: [
"$settledOnImport", null
]
}
]
}
}
}
],
as: "unsettledMoneyTransactions"
}
},
{
$lookup: {
from: Farmer.collection.name,
localField: 'farmerId',
foreignField: '_id',
as: 'farmerId'
}
},
это работает, но следующее не работает
await CoconutImports.aggregate([
{
$match: {
_id: Types.ObjectId(importId),
userId: Types.ObjectId(userId)
}
},
{
$lookup: {
from: Farmer.collection.name,
localField: 'farmerId',
foreignField: '_id',
as: 'farmerId'
},
{
$lookup: {
from: FMoneyTransactions.collection.name,
"let": {
"farmerId": "$farmerId._id"
},
pipeline: [
{
$match: {
$expr: {
$and: [
{
$eq: [
"$$farmerId",
"$farmerId"
]
},
{
$eq: [
"$settledOnImport", null
]
}
]
}
}
}
],
as: "unsettledMoneyTransactions"
}
}
}])
Может кто-нибудь объяснить, почему?