如何将子文档的计数大于特定日期。 假设我有以下模型,我想得到大于特定日期的聊天计数。
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 }
]
})
还尝试了其他一些类似的方法。 有谁可以帮助我?
如果可能请使用聚合框架建议。
答案 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
数组的长度,这将为您提供所需的计数。
希望这会有所帮助!