我有以下json:
{
"_id" : ObjectId("561f7896d3e4d2d8a6406baa"),
"array" : [
{
"inProgress" : false
"array2" : [
{
"taskId" : 1,
"finished" : false
}
]
}
]
}
我需要查找并测试两个标志(正在进行和完成)是否为真。这该怎么做?无论如何,我还是尝试了,找到了,elemmatch……无济于事。
我不会丢失文档的结构。
谢谢。
答案 0 :(得分:0)
考虑以下数据集:
[
{
"_id": "561f7896d3e4d2d8a6406baa",
"array": [
{
"inProgress": true,
"array2": [
{
"taskId": 1,
"finished": true
}
]
}
]
}
]
使用聚合管道以以下方式展开和过滤数组:
db.collection.aggregate([
{
$unwind: "$array"
},
{
$match: {
"array.inProgress": true
}
},
{
$project: {
"array.inProgress": 1,
"array.array2": {
$filter: {
input: "$array.array2",
as: "item",
cond: {
$eq: [
"$$item.finished",
true
]
}
}
}
}
},
{
$group: {
_id: "$_id",
array: {
$push: "$array"
}
}
}
])
给出输出:
[
{
"_id": "561f7896d3e4d2d8a6406baa",
"array": [
{
"array2": [
{
"finished": true,
"taskId": 1
}
],
"inProgress": true
}
]
}
]