MongoDB找到子文档

时间:2016-05-26 16:38:32

标签: mongodb

我正在开始收集汇总结果。 所以我关注了MO 'Pre aggegrated reports'

我正在使用此架构插入文档:

{
"_id" : "20160526/78220/59",
"metadata" : {
    "date" : "2016-05-26",
    "offer" : "78220",
    "adv" : NumberLong(59),
    "update" : ISODate("2016-05-26T10:49:25.597Z")
},
"daily" : NumberLong(6),
"hourly" : {
    "12" : NumberLong(6)
},
"publisher" : {
    "43" : {
        "daily" : NumberLong(3),
        "hourly" : {
            "12" : NumberLong(3)
        }
    },
    "738" : {
        "daily" : NumberLong(3),
        "hourly" : {
            "12" : NumberLong(3)
        }
    }
}

我们的想法是从每个发布商的每个小时收集汇总信息。 _id是日期/优惠/代码,每个发布商都可以提供一些优惠。 但现在我需要获得所有发布商优惠的每日或每小时数据的总和。

我的主要问题是如何访问特定发布商的报告,例如738或43? 如果我查询:

db.getCollection('daily_aggregate').find({'publisher.738':{$exists:true}})

我获得了包含发布商738的所有文档,但我也获得了其他发布商数据。我想从738检索数据。 我在这里尝试不同的方法,但可能我必须以某种方式在发布者模式中包含pub_id。

有任何线索吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

可能我需要查询的是:

db.getCollection('daily_aggregate').find({'publisher.738':{$exists: true}}, {_id: 0, 'publisher' : 1})

它给了我:

1
{
    "publisher" : {
        "738" : {
            "daily" : NumberLong(4),
            "hourly" : {
                "18" : NumberLong(4)
            }
        }
    }
}

2
{
    "publisher" : {
        "738" : {
            "daily" : NumberLong(6),
            "hourly" : {
                "18" : NumberLong(6)
            }
        }
    }
}

3
{
    "publisher" : {
        "43" : {
            "daily" : NumberLong(9),
            "hourly" : {
                "12" : NumberLong(3),
                "19" : NumberLong(6)
            }
        },
        "738" : {
            "daily" : NumberLong(3),
            "hourly" : {
                "12" : NumberLong(3)
            }
        }
    }
}

4
{
    "publisher" : {
        "43" : {
            "daily" : NumberLong(1),
            "hourly" : {
                "12" : NumberLong(1)
            }
        },
        "738" : {
            "daily" : NumberLong(2),
            "hourly" : {
                "12" : NumberLong(2)
            }
        }
    }
}

但我想知道这是否是最好的情况。