【问题标题】:MongoDB: Query by size of array with a filtered valueMongoDB:使用过滤值按数组大小查询
【发布时间】:2013-04-22 16:56:28
【问题描述】:

在 MongoDB 中,我有一个具有以下基本架构的集合(“用户”):

{
    "_id" : ObjectId("50e5de00b623143995c5b739")
    "name" : "Jon",
    "emails_sent" : [ 
        {
            "type" : "invite",
            "sent_time" : ISODate("2013-04-21T21:11:50.999Z")
        },
        {
            "type" : "invite",
            "sent_time" : ISODate("2013-04-15T21:10:35.999Z")
        },
        {
            "type" : "follow",
            "sent_time" : ISODate("2013-04-21T21:11:50.999Z")
        }
    ]
}

我想仅根据特定“类型”的 emails_sent 的 $size 来查询用户,例如只计算“邀请”电子邮件。有什么方法可以在标准 mongo 查询中实现这种“过滤计数”?

非常感谢。

【问题讨论】:

    标签: mongodb


    【解决方案1】:
    db.users.aggregate([
     {$unwind:'$emails_sent'},
     {$match: {'$emails_sent.type':'invite'}},
     {$group : {_id : '$name', sumOfEmailsSent:{$sum:1} }}
    ]);
    

    顺便说一句,您缺少一个关闭 $emails_sent 数组的方括号。

    【讨论】:

    • 当然还有另一个 $match 作为最后一步,它只会返回拥有所需数量的此类电子邮件的用户,对吧?
    • 当然可以。也许程序员想要查看具有特定 email_sent 计数的单个用户或用户列表。留给程序员选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2021-12-28
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多