Node.js 在Mongoose中匹配两个不同的字段,聚合?
我正在尝试匹配同一文档中的两个不同字段。但是没有得到我想要的预期输出。 让我举个例子 我想将Node.js 在Mongoose中匹配两个不同的字段,聚合?,node.js,mongodb,mongoose,aggregate,Node.js,Mongodb,Mongoose,Aggregate,我正在尝试匹配同一文档中的两个不同字段。但是没有得到我想要的预期输出。 让我举个例子 我想将加权.phaseId与阶段进行匹配。_id在同一文档中,不匹配的应该从阶段字段中删除 有人有主意吗 //在数据库上处理某些聚合查询后的文档 { "_id" : ObjectId("5a680c803096130f93d11c7a"), "weighted" : [ { "phaseId" : ObjectId("5a6734c32414e15d0c
加权.phaseId
与阶段进行匹配。_id
在同一文档中,不匹配的应该从阶段
字段中删除
有人有主意吗
//在数据库上处理某些聚合查询后的文档
{
"_id" : ObjectId("5a680c803096130f93d11c7a"),
"weighted" : [
{
"phaseId" : ObjectId("5a6734c32414e15d0c2920f0"),
"_id" : ObjectId("5a680c803096130f93d11c7b")
},
{
"phaseId" : ObjectId("5a6734c32414e15d0c2920ee"),
"_id" : ObjectId("5a680c803096130f93d11c7c")
}
],
"phases" : [
{
"phase_name" : "Phase 1",
"_id" : ObjectId("5a6734c32414e15d0c2920f0")
},
{
"phase_name" : "Phase 2",
"_id" : ObjectId("5a6734c32414e15d0c2920ef")
},
{
"phase_name" : "Phase 3",
"_id" : ObjectId("5a6734c32414e15d0c2920ee")
},
{
"phase_name" : "Phase 4",
"_id" : ObjectId("5a6734c32414e15d0c2920ed")
}
]
}
//预期产量
{
"_id" : ObjectId("5a680c803096130f93d11c7a"),
"weighted" : [
{
"phaseId" : ObjectId("5a6734c32414e15d0c2920f0"),
"_id" : ObjectId("5a680c803096130f93d11c7b")
},
{
"phaseId" : ObjectId("5a6734c32414e15d0c2920ee"),
"_id" : ObjectId("5a680c803096130f93d11c7c")
}
],
"phases" : [
{
"phase_name" : "Phase 1",
"_id" : ObjectId("5a6734c32414e15d0c2920f0")
},
{
"phase_name" : "Phase 3",
"_id" : ObjectId("5a6734c32414e15d0c2920ee")
}
]
}
您可以使用以下聚合:
db.col.aggregate([
{
$addFields: {
weightedIds: {
$map:
{
input: "$weighted",
as: "w",
in: "$$w.phaseId"
}
}
}
},
{
$project: {
_id: 1,
weighted: 1,
phases: {
$filter: {
input: "$phases",
as: "phase",
cond: { $gte: [ { $indexOfArray: [ "$weightedIds" , "$$phase._id" ] }, 0 ] }
}
}
}
}
])
我们使用
$map
只获取加权的阶段id
字段,然后我们可以通过检查每个阶段是否存在相应的id
来过滤阶段
(否则使用该字段返回-1)您所做的聚合是什么?原始文档结构是什么?