Я вычисляю количество проверок, используя $arrayElemAt, но возвращаю количество всех элементов. Мне нужно получить счет, который имеет $projectdata.inspection_data.published == 'Y'
"inspection_count" : {$size: {"$ifNull":[{$arrayElemAt:["$projectdata.inspection_data",0]},[] ] } }
Как получить счет на основе условия
Мой код:
mongo.folder.aggregate([
{
$lookup:
{
from: 'inspections',
localField: '_id',
foreignField: 'projectID',
as: 'projectdata'
}
},
{ $match : {
$and: [
querydata
]
}
},
{
"$project": {
"folder_name" : "$folder_name",
"location_name": "$location_name",
"architect_name" :"$architect_name",
"cover_img": "$cover_img",
"created_date" : "$created_date",
"parent_id":"$parent_id",
"share" : "$share",
"share_id":'$share_id',
"user_id": "$user_id",
"customer_id" : "$customer_id",
"download_access" : "$download_access",
"inspection_count": {
"$size": {
"$filter": {
"input": "$projectdata.inspection_data",
"as": "el",
"cond": { "$eq": [ "$$el.published", "Y" ] }
}
}
}
}
}
]).exec(function (err, response) {
console.info("Inside Parent Id 1")
console.info(response)
if (response){
response.splice(0, 0, responseparent);
}
else
{
response = responseparent;
}
if (err){
res.json({ 'folder': [], 'filelist': [] }); } else {
res.json({ 'folder': response, 'filelist': [] }); }
});
теперь его показывает:
[ { _id: 00000000d080d32e387121c2,
folder_name: 'Eq1',
location_name: 'Chennai',
architect_name: 'Architect Hafeez',
cover_img: '1539170072349-rmTeigYTa9pmjpdP.png',
created_date: 2018-10-24T06:05:33.533Z,
parent_id: [ 00000000d080d32e387121c0 ],
share: 'N',
share_id: [ 00000000d080d32e387121bf, 000000002ef020361c3d1ff7 ],
user_id: 00000000400376127c1a8a31,
customer_id: [ 00000000d080d32e387121bf ],
download_access: 'Y',
inspection_count: 21 },
]
Ожидание:
[ { _id: 00000000d080d32e387121c2,
folder_name: 'Eq1',
location_name: 'Chennai',
architect_name: 'Architect Hafeez',
cover_img: '1539170072349-rmTeigYTa9pmjpdP.png',
created_date: 2018-10-24T06:05:33.533Z,
parent_id: [ 00000000d080d32e387121c0 ],
share: 'N',
share_id: [ 00000000d080d32e387121bf, 000000002ef020361c3d1ff7 ],
user_id: 00000000400376127c1a8a31,
customer_id: [ 00000000d080d32e387121bf ],
download_access: 'Y',
inspection_count: 3 },
]
Итого 21 Но я должен показать только те, опубликовав статус 'Y
$arrayElemAt возвращает только элемент в заданной позиции. В вашем запросе он вернет только первый элемент, обозначенный 0. Ваш вопрос предполагает, что вы хотите получить количество на основе некоторого условия.
Да, мне нужно считать в зависимости от состояния
Можете ли вы вставить некоторые образцы данных или хотя бы простую структуру?
@Vishnu Можете ли вы добавить пример данных и ожидаемый результат?
Я обновил свой код Пожалуйста, проверьте
Я думаю, вам не хватает расслабления перед проектом $. Раскрутите данные проекта и введите входные данные в виде $inspection_data.
@Akash Я становлюсь неопределенным





Можете ли вы вставить сюда структуру своего документа для получения дополнительной информации и того, какой счет вы планируете получить?