javascript - 如何一次从具有嵌套对象数组的多个文档中获取与来自 mongodoDb 的查询匹配的所有值
问题描述
我在 mongoDb 中的用户模型具有以下数据。我想要的是文档 id ==(60202754626aea0f30473f09) 的用户,我想从 cardArray 和 loginIdsArray 中获取所有对象,其 isFavourite 值 == true
我确实应用了这段代码,但在 console.log(ans) 是空数组 []。此代码也适用于 loginidsArray。如何一次从两个数组中获取所有值
const ans = await UserDatabase.aggregate([
{ $match: { _id: req.query.user_id } },
{
$project: {
loginIdsArray: {
$filter: {
input: "$loginIdsArray",
as: "item",
cond: { $eq: ["$$item.isFavourite", true] },
},
},
},
},
]);
// console.log("fetched fav", response);
console.log("ans", ans);
{
"_id": "60202754626aea0f30473f09",
"name": "Praveen Lohar",
"email": "prvnlhr1@gmail.com",
"password": "$2a$12$031HBBwJSaAzZ8TK4jkqTOBI0jUQcUuKbMk2UPZyFLRmWlFveJBZm",
"cardsArray": [
{
"isFavourite": false,
"_id": "60202538445530b28525df55d",
"user": "Thor ",
"bank": "Bank of Asgard",
"cardNo": "551157766323",
"expiry": "02/35",
"cvv": "522325",
"pin": "23",
},
, {
"isFavourite": false,
"_id": "602025380475d30b2840dd84",
"user": "Pepper Pots",
"bank": "Bank of NewYork",
"cardNo": "578454412312121",
"expiry": "02/35",
"cvv": "525",
"pin": "45455",
}],
"loginIdsArray": [
{
"isFavourite": false,
"_id": "602004abef310e0ee4c36319",
"website": "Google",
"username": "stark.Server122",
"password": "55412pponj88"
}, {
"isFavourite": true,
"_id": "60200fb9e79d5126b45594eb",
"website": "Facebook",
"username": "prvnlhr007@gmail.com",
"password": "545121fdfnjfdnfdkjnd"
}, {
"isFavourite": false,
"_id": "602013c570b26d0fdcb17a7e",
"website": "Github",
"username": "prvnlhr007@gmail.com",
"password": "545121fdfnjfdnfdkjnd"
}, {
"isFavourite": true,
"_id":"602013d570b26d0fdcb17a7f",
"website": "Instagram",
"username": "iamlohar007@gmail.com",
"password": "545121fdfnjfdnfdkjnd"
}],
"__v": {
"$numberInt": "0"
}
}
解决方案
您的聚合看起来不错 - 在这里演示https://mongoplayground.net/p/GX-k5W4Pbhe
因此,它看起来好像没有找到该文档。也许您使用的是 native ObjectID
s_id
而不是字符串,因此您的$match
查询应该是:
{ $match: { _id: mongoose.Types.ObjectId(req.query.user_id) } }
如此处所述 https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate
推荐阅读
- sql - 使用 NodeJS + MongoDB(或 SQL)实现搜索算法
- groovy - 当未定义其他 var 时,groovy 使用 var
- angular - 在同一页面角度中多次使用同一组件时避免多次 api 调用
- r - 有没有办法在openxlsx的write.xlsx函数中将默认覆盖改成yes?
- javascript - 如何在 JSX 中实现 forEach() - React Native for Custom Headers
- python - 如何将事务矩阵导入 Python?
- amazon-cognito - AWS Cognito - 以编程方式获取刷新令牌到期
- angular - 在 Angular 应用程序中配置 API URL
- javascript - 如何在悬停此元素时使光标跟随器与另一个 div 的位置/大小相同
- ffmpeg - ffmpeg 无法识别的选项'--enable-libopus'