如何使用嵌套数组中的项目使用$in获取数据



我想使用数组在mongo 中搜索数据

这是我的数据

{
"_id": ObjectID("5f0d6e394556410d486f6828"),
"branchId": "exampleId",
"info": [
{
"date": "12-10-09",
"programs": [
{
"programId": "ObjectId1",    
},
{
"programId": "ObjectId2",    
},
{
"programId": "ObjectId3",    
},

],
}
],
}

我想用数组找到programId这里是我的数组

const  programIdArr  =  ["ObjectId1","ObjectId2"]

我想出去注意:我想在mySql中使用programIdArr搜索,我们可以在中使用类似的东西

{
"_id": ObjectID("5f0d6e394556410d486f6828"),
"branchId": "exampleId",
"info": [
{
"date": "12-10-09",
"programs": [
{
"programId": "ObjectId1",    
},
{
"programId": "ObjectId2",    
},
],
}
],
}

以下是我尝试做的

const program =
Models.aggregate([
{ $match: { _id: Mongoose.Types.ObjectId('5f0d6e394556410d486f6828') } },
{
//for first project I already get where date = 12-10-09
$project: {
info: {
$filter: {
input: '$info',
as: 'info',
cond: { $eq: ['$$info.date', '12-10-09'] },
},
},
},
// in this project I try to filter programId by using programIdArr It doesn't work
$project: {
info: {
$filter: {
input: '$info.programs.programId',
as: 'programId',
cond: { $in: [programIdArr] },
},
},
},
},
{ $unwind: { path: '$info' } },
])
.exec()

当我在中阅读文档$时,它的返回只有true和false,我也尝试使用$all,但它也不起作用。

你可以试试这个

[{
$match: {
_id: ObjectId("5f0d6e394556410d486f6828")
}
}, {
$unwind: {
path: "$info",
preserveNullAndEmptyArrays: false
}
}, {
$project: {
branchId: 1,
"info.date": 1,
"info.programs": {
$filter: {
input: '$info.programs',
as: 'p',
cond: {
$in: ["$$p.programId", ["ObjectId1", "ObjectId2"]]
},
},
}
}
}, {
$group: {
_id: "$_id",
branchId: {
$first: "$branchId"
},
info: {
$addToSet: "$info"
}
}
}]

工作Mongo游乐场

最新更新