我正在使用MongoDB 3+版本。我有一些文件(“ doc”) “ doc”具有“行”列表。每行都有“单位”列表。单位的字段为“状态”。
我必须返回带行的文档,但是仅需要在状态为“新”的情况下包含单元。
{
"_id" : ObjectId("5b7a7184e0e432207cc47612"),
"_class" : "MyClass",
"rows" : [
{
"activity" : false,
"units" : [
{
"unitId" : "35",
"status" : "status",
"bookingDay" : {
"dateValue" : ISODate("2018-06-30T21:00:00.000Z")
}
},
{
"unitId" : "40",
"status" : "new",
"bookingDay" : {
"dateValue" : ISODate("2018-08-15T21:00:00.000Z")
}
}
]
}
],
"mediaId" : NumberLong(4)
}
预期结果-排除了第一个单位
{
"_id" : ObjectId("5b7a7184e0e432207cc47612"),
"_class" : "com.samsolutions.adbuybackend.model.booking.radio.BookingBoardRadio",
"rows" : [
{
"rubricName" : "rubric1",
"timeFrom" : ISODate("2018-08-20T07:20:00.000Z"),
"activity" : false,
"units" : [
{
"unitId" : "40",
"status" : "new",
"bookingDay" : {
"dateValue" : ISODate("2018-08-15T21:00:00.000Z")
}
}
]
}
],
"mediaId" : NumberLong(4)
}
答案 0 :(得分:0)
db.getCollection("doc").aggregate(
// Pipeline
[
// Stage 1
{
$unwind: {
path: "$rows",
includeArrayIndex: "arrayIndex", // optional
preserveNullAndEmptyArrays: false // optional
}
},
// Stage 2
{
$project: {
rows: {
units: {
$filter: {
input: "$rows.units",
as: "item",
cond: {
$eq: ["$$item.status", "new"]
}
}
}
},
_class: 1,
mediaId: 1
}
},
]
);