我有这个事件数组,但不知道如何查询“来宾”嵌套数组,并做两件事。
下面的代码是在第20次迭代中进行的,并没有进一步接近。
const event = await Event.findById(req.params.id);发布于 2021-11-29 03:57:41
对于MongoDB查询,可以使用$size计算数组字段的大小,并使用$filter筛选与投影中的条件匹配的特定文档。
db.collection.find({
_id: "1"
},
{
_id: 1,
name: 1,
guests: 1,
totalGuests: {
$size: "$guests"
},
attendedGuests: {
$size: {
"$filter": {
input: "$guests",
cond: {
$eq: [
"$$this.attended",
"Y"
]
}
}
}
}
})发布于 2021-12-02 02:55:17
勇顺帮了上面的忙,但没有得到百分之百的帮助--这是一个完整的答案,以防任何人在将来遇到这样的事情:
module.exports.showEvent = async (req, res) => {
const event = await Event.findById(req.params.id).populate('artist');
const { guest_id } = req.cookies;
let totalGuests = 0;
let attendedGuests = 0;
const eventData = await Event.aggregate([
{
"$match": {
"_id": objectId(req.params.id)
}
},
{
$project: {
_id: 1,
name: 1,
guests: 1,
totalGuests: { $cond: { if: { $isArray: "$guests" }, then: { $size: "$guests" }, else: "NA" } },
attendedGuests: {
$size: {
$filter: {
input: "$guests",
as: "guest",
cond: {
$and: [{
$eq: ["$$guest.attended", "Y"]
}]
}
}
}
}
}
}
])
if (eventData && Array.isArray(eventData) && eventData.length > 0) {
totalGuests = eventData[0].totalGuests;
attendedGuests = eventData[0].attendedGuests;
}
if (!event) {
req.flash('error', 'Cannot find that Event');
return res.redirect('/events');
}
res.render('events/show', { event, eventData });
console.log(totalGuests, attendedGuests);
}; https://stackoverflow.com/questions/70149103
复制相似问题