我们有一个对象数组,每个对象都包含对象“会话”数组。我们需要获取 deliveryStatus 字段已已发送和的计数/元素> userId 正在退出
[{
_id: "12312312"
conversation:[
{
"messageInformation" : {
"deliveryStatus" : "sent"
},
"userId" : 12
},
{
"messageInformation" : {
"deliveryStatus" : "sent",
}
}
]},
_id: "213123123123"
conversation:[
{
"messageInformation" : {
"deliveryStatus" : "sent"
},
"userId" : 33
},
{
"messageInformation" : {
"deliveryStatus" : "sent",
"userInfo" : [ ]
}
}
]}
]
我需要总数。我尝试尝试 elemMatch ,但它只返回第一个元素
let counter = await ProjectConversation.find({
conversation: {
$elemMatch: {
userId :{$exists: true},
"messageInformation.deliveryStatus": deliveryStatus.Sent
}
}
}, {
_id: 0,
conversation.$: 1
});
如果我得到对象并使用javascript进行计数,那会很好
答案 0 :(得分:0)
您可以使用aggregate
$unwind
解构数组,并使用$count
计算与$match
属性匹配的文档数,例如:
db.collection.aggregate([{
$unwind: "$conversation"
},
{
$match: {
"conversation.messageInformation.deliveryStatus": "sent",
"conversation.userId": {
$exists: true
}
}
},
{
$count: "NumberOfMsgSent"
}
])