如何在蒙哥数组中获得对象的长度?



我的数据库结构是这样的:db中的消息模型每个文档都有">receivernnumbers";对象字段";类型:

receiverNumbers: {
type: [{type: Object}],
required: true
},

在这个对象中,有两个属性。">phoneNumber";和">resultSend";witch resultSend是一个属性很少的对象。

如何获得发送的所有文档的receivernnumbers的长度";resultSend的属性";对象是true

?我知道我应该使用聚合,但我不知道如何。

考虑到您的输入文档看起来像这样:

{
"_id": "id_1",
"User": "user_1",
"TotalNumber": 50,
"SuccessNumber": 50,
"__v": 0,
"receiverNumbers": [
{
"phoneNumber": "01 23 45 67 89",
"resultSend": {
"senderNumber": "00 00 00 00 00",
"messageText": "Hello World sent 1",
"dateTime": "2023-01-18",
"send": true
}
},
{
"phoneNumber": "01 23 45 67 89",
"resultSend": {
"senderNumber": "00 00 00 00 00",
"messageText": "Hello World sent 2",
"dateTime": "2023-01-18",
"send": true
}
},
{
"phoneNumber": "01 23 45 67 89",
"resultSend": {
"senderNumber": "00 00 00 00 00",
"messageText": "Hello World not sent 1",
"dateTime": "2023-01-18",
"send": false
}
},
{
"phoneNumber": "01 23 45 67 89",
"resultSend": {
"senderNumber": "00 00 00 00 00",
"messageText": "Hello World sent 3",
"dateTime": "2023-01-18",
"send": true
}
},
{
"phoneNumber": "01 23 45 67 89",
"resultSend": {
"senderNumber": "00 00 00 00 00",
"messageText": "Hello World not sent 2",
"dateTime": "2023-01-18",
"send": false
}
},

]
}

并且您希望每个文档的receivernnumbers中element. resultsend .send为真的元素的个数

你可以这样做:

db.collection.aggregate([
{
"$addFields": {
"totalSend": {
$sum: {
"$map": {
"input": "$receiverNumbers",
"as": "val",
"in": {
$cond: [
"$$val.resultSend.send",
1,
0,

]
}
}
}
}
}
}
])

您可以查看https://mongoplayground.net/p/crlKjIcmcWR进行测试。

如果这回答了你的问题,请告诉我。

您可以尝试这样做:

db.collection.aggregate([
{ $match: { "receiverNumbers.resultSend.send": true } },
{ $project: { length: { $size: "$receiverNumbers" } } },
]);

最新更新