Node.js 从mongodb查找聚合获取true或false(仅值而非数组或对象)
我正在尝试创建一个函数,该函数返回用户是否是最喜欢的 我在用户模型上使用MongoDB聚合,带有lookout with Favorites模型(其中所有Favorites用户都已保存),带有管道和$project 下面是MongoDB聚合函数查询Node.js 从mongodb查找聚合获取true或false(仅值而非数组或对象),node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试创建一个函数,该函数返回用户是否是最喜欢的 我在用户模型上使用MongoDB聚合,带有lookout with Favorites模型(其中所有Favorites用户都已保存),带有管道和$project 下面是MongoDB聚合函数查询 await User.aggregate([ { $match: { _id: ObjectId(_id), },
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
}
]
}
]
但是我想得到是你最喜欢的: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_Favorite:{$arrayElemAt:[“$is_Favorite.is_Favorite”,0]}
}
}