Mongodb获取特定字段的计数

时间:2016-06-23 06:08:48

标签: mongodb mongoose

如何将子文档的计数大于特定日期。 假设我有以下模型,我想得到大于特定日期的聊天计数。

model = {
"chats" : [ 
    {
        "comment" : "hi",
        "_id" : ObjectId("576a2107aa7940f029ce6547"),
        "createdDateTime" : ISODate("2016-06-22T05:24:23.422Z")
    }, 
    {
        "comment" : "asdasdsa",
        "_id" : ObjectId("576a2367aa7940f029ce6548"),
        "createdDateTime" : ISODate("2016-06-22T05:34:31.628Z")
    }, 
    {
        "comment" : "dsadasd",
        "_id" : ObjectId("576a2369aa7940f029ce6549"),
        "createdDateTime" : ISODate("2016-06-22T05:34:33.354Z")
    }, 
],}

我已经尝试了

             Model.count({
                 $and: [
                     { 'chats.createdDateTime': {$lt: '2016-06-22T10:03:21.879Z' } }, { '_id':messages[index]._id  }
                 ]
             })

还尝试了其他一些类似的方法。 有谁可以帮助我?

如果可能请使用聚合框架建议。

2 个答案:

答案 0 :(得分:0)

尝试使用Data代替String

Model.count({
             $and: [
                 { 'chats.createdDateTime': {$lt: new Date() } }, 
                 { '_id':messages[index]._id  }
             ]
         })

答案 1 :(得分:0)

如果你可以使用aggreagte,以下查询可以帮助你: -

var date = '2016-06-22T10:03:21.879Z',

db.collection.aggregate([
{ 
    "$match": {
        "chats.createdDateTime": { "$gt": date}
    }
},
{
    "$project": {
        "chats": {
            "$filter": {
                "input": "$chats",
                "as": "o",
                "cond": {  
                     "$gt": [ "$$o.createdDateTime", date ] },             
                    ]
                }
            }
        }
    }
}])

通过使用查询,chats将仅包含与提供的条件匹配的对象。

现在,您可以从每个文档中获取chats数组的长度,这将为您提供所需的计数。

希望这会有所帮助!