Mongodb 如何在嵌套数组中查找(至少两级)
我有以下json:Mongodb 如何在嵌套数组中查找(至少两级),mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我有以下json: { "_id" : ObjectId("561f7896d3e4d2d8a6406baa"), "array" : [ { "inProgress" : false "array2" : [ { "taskId" : 1, "finished" : false
{
"_id" : ObjectId("561f7896d3e4d2d8a6406baa"),
"array" : [
{
"inProgress" : false
"array2" : [
{
"taskId" : 1,
"finished" : false
}
]
}
]
}
我需要找到并测试这两个标志(inProgress和finished)是否为真。如何做到这一点?不管怎样,我试过了,用find,elemmatch。。。无济于事
我不能丢失文件的结构
谢谢。考虑到以下数据集:
[
{
"_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
}
]
}
]
请编辑问题以显示您尝试了什么,并显示您遇到的具体障碍。有关更多信息,请参阅。谢谢。但现在的问题是,当finished为false时,它会将array2留空。如何解决?我们的想法是在这两个标志之间进行过滤,就像它是一个and(inProgress&finished)一样。您想检查inProgress=true或isFinished=true以返回完整文档,如果其中任何一个为true,则返回完整文档,而不是两个都为true?都为true。但是,当我有一个带有“finished”:false的记录时,我不能返回$array2[],而是隐藏$array。我需要在array2为空时,不返回这个结构块(finished:false)。谢谢,完成了。这是得到我需要的结果的唯一解决方案吗?