在Object MongoDB的All子项中查找

时间:2017-08-21 09:38:59

标签: mongodb

我在mongodb中有这个文件

 {
    "name": "test2",
    "_id": "1502609098801598ffeca615f5d3dd09087c6",
    "events": {
        "0": {
            "delay": "0",
            "actionid": "2"
        },
        "1": {
            "delay": "0",
            "actionid": "3"
        }
    }
}

我想查找包含具有特定actionid的事件的文档 我试过这样的东西,但我找不到我想要的东西

db.mycollection.find({ "events.$.actionid":"2" })
db.mycollection.find({ "events.$**.actionid":"2" })
db.mycollection.find({ "events.$": { $elemMatch: { "actionid":"2"} })
请注意:我无法更改文档结构,mongodb版本是3.0.6

1 个答案:

答案 0 :(得分:0)

我们可以使用mongodb中的聚合功能和project object to an array

db.test.aggregate( [ { "$project" : { "events" : { "$objectToArray" : "$events" } } } ] )

在此之后我们可以使用$match

的常规数组过滤
db.test.aggregate([
    { "$project":
        { "events": {"$objectToArray": "$events"} } },
    { "$match": 
        { "events.v.actionid" : "2" } } ] )

这将输出以下内容:

{
        "_id" : "1502609098801598ffeca615f5d3dd09087c6",
        "events" : [
                {
                        "k" : "0",
                        "v" : {
                                "delay" : "0",
                                "actionid" : "2"
                        }
                },
                {
                        "k" : "1",
                        "v" : {
                                "delay" : "0",
                                "actionid" : "3"
                        }
                }
        ]
}
>

因此,您可能希望将文档投影回其原始结构