我的aggregrate函数返回空数组与邮差,但当我做了同样的与mondbcompass它是正确返回文档



我的邮政路线它是在mongodb指南针显示所有文档,但在邮差给出空数组

router.post("/dashboard/messages", async (req, res) => {
try {
const userid = req.body.userid;
const user = await User.aggregate([
{
"$match": {
"friendsList": userid
}
},
])
if(user){
res.send(user)
}else{
res.send({ message: "error" });
}
} catch (e) {
res.send({ message: "Error in Fetching user" });
}
});

mongodb罗盘输入在聚合是

{
friendsList:ObjectId('6043100b0ca25c23d4928067')
}

匹配的输出文档例句:_

id:6043100b0ca25c23d4928067
createdAt:2021-03-06T05:11:24.044+00:00
friendsList:Array
username:"d"
email:"d@gmail.com"
password:"$2a$10$nxb2qkjbz35Ra9GW6DP3YeHAeeVni9BIB7i0yCH.qHSpVVy8xp2Ke"
__v:0

邮差:输入

{
"userid":"6043100b0ca25c23d4928067"
}

outut:

[]

我认为正确的代码是

router.post('/dashboard/messages', async (req, res) => {
try {
const userid = req.body.userid;
const user = await User.aggregate([
{ $match: { friendsList: mongoose.Types.ObjectId(userId) } },
]);
if (user.length) {
res.send(user);
} else {
res.send({ message: 'error' });
}
} catch (e) {
res.send({ message: 'Error in Fetching user' });
}
});

首先你需要将字符串转换为objectId,然后你必须使用if(user.length)而不是if(user)

因为user总是一个数组。你需要检查数组中是否有数据。这就是为什么我在if else条件下使用user.length

最新更新