MongoDb聚合检查对象数组中是否存在id
我写了这个聚合,效果很好MongoDb聚合检查对象数组中是否存在id,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我写了这个聚合,效果很好 db.ParcelStatus.aggregate([{ { $lookup: { from: "Parcel", localField: "parcelId", foreignField: "_id", as: "parcel" } }, { $unwind: {
db.ParcelStatus.aggregate([{
{
$lookup: {
from: "Parcel",
localField: "parcelId",
foreignField: "_id",
as: "parcel"
}
},
{
$unwind: {
path: "$parcel",
preserveNullAndEmptyArrays: true
}
},
{
$lookup: {
from: "ParcelStatus",
localField: "parcel._id",
foreignField: "parcelId",
as: "parcel.parcelStatuses"
}
},
{
$lookup: {
from: "Customer",
localField: "parcel.customerData.customerId",
foreignField: "_id",
as: "parcel.customerData.customer"
}
},
{
$unwind: "$parcel.customerData.customer"
}
])
现在在ParcelStatus数组中,包含在PARCEL对象中,我需要检查它
if(parcel.ParcelStatus.includes((x) => x.statusRepositoryId === 'ID's from frontend')
//then run $match on root against statusRepositoryId === 'SPECIFIC STATIC ID'
我不知道我怎样才能做到这一点。非常感谢您的帮助只需添加此
$match
阶段:
{
$match: {
"parcel.parcelStatuses.statusRepositoryId": {$in: idArrayFromClient}
}
}
您可以发布应用该条件的文档结构。@ PrasADy:您可以在PARSELSTATE <代码> { ID:`yid,StaseSaveStuoRyid:“StutuSid”,PARCELID:“PraseID”} /代码>这个匹配阶段需要在查找中还是在开始?嘿,汤姆,再次感谢您的回答,但我无法确定我需要在哪里修复此阶段,请您编写完整的聚合?这条路对吗?parcelStatuses.statusRepositoryId?parcelStatuses是数组而不是对象,因此我不确定是否可以像这样访问parcelStatuses数组中的statusrepositoryId,只需将此阶段添加到最后。(或在检索repositroy id的查找之后)。语法正确,这是Mongo的点表示法的行为: