MongoDB查找具有对象值的数组数据的查询

时间:2019-07-03 11:05:37

标签: node.js mongodb mongoose

我陷入了monogodb查询构建问题,并且无法将数据查找到数组对象值中。

在此数组中,如果我得到具有特定值的特定对象,则获得

例如:

-->in department --> "5a6589d94abd7408c36350da" --> "received"

如果“ received”值是false,则它将返回整个文档。

我的数据对象在这里。

{"_id": "5cff4d893d900862be52cac5",
                    "priority": 1,
                    "description": "",
                    "duration": 8,
                    "user": null,
                    "department": [
                        {
                            "5a6589834abd7408c36350d9": {
                                "skiped": false,
                                "completed_date": "2019-06-11T06:36:09.431Z",
                                "completed": true,
                                "received_date": "2019-06-11T06:36:09.431Z",
                                "received": true
                            }
                        },
                        {
                            "5a6589d94abd7408c36350da": {
                                "skiped": false,
                                "completed_date": "2019-06-26T09:36:52.975Z",
                                "completed": true,
                                "recieved_date": "2019-06-11T06:43:21.590Z",
                                "received": false,
                                "totalDaysofCompletion": 15,
                                "user_id": "5b3c629a250d3a65eb7367a5"
                            }
                        },
                        {
                            "5a658b054abd7408c36350db": {
                                "skiped": false,
                                "completed_date": "2019-06-11T06:36:09.431Z",
                                "completed": false,
                                "received_date": "2019-06-26T09:36:52.980Z",
                                "received": true
                            }
                        }
]
}

2 个答案:

答案 0 :(得分:0)

首先通过_id检索文档,然后检查接收值。 或者您可以通过传递_id和接收值false来查找文档,如果该文档的接收值是false,则它将返回null,否则将返回文档。

查询多个参数可以为您提供帮助。 department.find({"_id" : "5a6589d94abd7408c36350da" , "received" : false })

答案 1 :(得分:0)

尝试一下

db.getCollection("demo_table").aggregate(
[
    { 
        "$unwind" : {
            "path" : "$department"
        }
    }, 
    { 
        "$match" : {
            "department.5a6589d94abd7408c36350da" : {
                "$exists" : true
            }, 
            "department.5a6589d94abd7408c36350da.received" : false
        }
    }, 
    { 
        "$project" : {
            "department" : 1.0
        }
    }
]
);