node.js - 从 mongodb 查找聚合中获取真或假(仅值不是数组或对象)
问题描述
我正在尝试制作一个返回用户是否喜欢的函数。
我在 User 模型上使用 MongoDB 聚合,并使用带有管道和 $project 的收藏模型(所有收藏的用户都保存在其中)的lookout
这是MongoDB聚合函数查询
await User.aggregate([
{
$match: {
_id: ObjectId(_id),
},
},
{
$lookup: {
from: 'userportfolios',
localField: '_id',
foreignField: 'user',
as: 'user_portfolios',
},
},
{
$lookup: {
from: 'favourites',
pipeline: [
{
$match: {
user: ObjectId(data.user._id),
favourites: {
$elemMatch: {
$eq: ObjectId(_id),
},
},
},
},
{
$project: {
_id: 0,
is_favourite: {
$cond: [
{ $ifNull: ['$is_favourite', false] },
{ $literal: true },
{ $literal: false },
],
},
},
},
],
as: 'is_favourite',
},
},
]);
我得到了这个结果
[
{
"_id": "602b5078e8eb5339e0134351",
"is_active": true,
"is_admin": false,
"is_block": false,
"user_type": "company",
"firstName": "Sagar",
"lastName": "Davara",
"mobileNumber": "*******",
"email": "s*********@gmail.com",
"password": "b7370338e54b1cb051be0dd54eba2f7f",
"verificationCode": "210768",
"createdAt": "2021-02-16T04:56:24.091Z",
"updatedAt": "2021-02-16T04:56:24.091Z",
"user_portfolios": [],
"is_favourite": [
{
"is_favourite": false
}
]
}
]
但我想得到is_favourite: true
而不是对象数组我需要来自 mongodb 的输出
[
{
"_id": "602b5078e8eb5339e0134351",
"is_active": true,
"is_admin": false,
"is_block": false,
"user_type": "company",
"firstName": "Sagar",
"lastName": "Davara",
"mobileNumber": "6353764283",
"email": "sagardspeed3@gmail.com",
"password": "b7370338e54b1cb051be0dd54eba2f7f",
"verificationCode": "210768",
"createdAt": "2021-02-16T04:56:24.091Z",
"updatedAt": "2021-02-16T04:56:24.091Z",
"user_portfolios": [],
"is_favourite": false
}
]
解决方案
只需在阶段后添加以下$lookup
阶段:
{
$addFields: {
is_favourite: { $arrayElemAt: ["$is_favourite.is_favourite", 0] }
}
}
推荐阅读
- java - 是否可以使用 Android Studio 将 Kotlin 转换为 Java?
- r - 未能将数据框导出为 CSV
- c# - 以编程方式创建拉取请求并添加审阅者、工作项
- git - 如何使 git 分支的最新代码与另一个分支相同?
- ionic-framework - Ionic:我可以打开我的模拟器,但无法在上面启动我的应用程序
- javascript - JS嵌套原型访问父节点
- python - 我无法在 python 中替换 \xe2\x97\x8f
- angular - 缓存可重用 Angular 组件的图像/gif
- php - mpdf 仅应用某些样式
- java - 监视具有事务方法的服务弹簧