我在用户数组中有
friends
数组,我需要通过电子邮件获取特定用户的所有friends
,approved
字段是true
在 nodejs 中我有用户 mongo 模式
const UserSchema = mongoose.Schema({
username : {type: String , required :true},
email : {type: String , required :true, unique: true, match: /.+\@.+\..+/},
password : {type: String , required :true},
friends : {type:[{username : String, approved: Boolean}]},
});
[
{
"username": "ali",
"email": "ali200@gmail,com",
"password": "pdcjjfefmkadjakefkeofjafjafsfjsalnnryifajs",
"friends": [
{
"id": "1",
"username": "gamal",
"approved": true
},
{
"id": "2",
"username": "osama",
"approved": false
},
{
"id": "3",
"username": "john",
"approved": true
}
]
}
]
我需要得到
friends
对象的数组,approved
字段是true
像这样
[
{
"id": "1",
"username": "gamal",
"approved": true
},
{
"id": "3",
"username": "john",
"approved": true
}
]
代码来自评论:
router.get("/getFriends", (req, res) => {
var email = getEmailFromToken(req.header("Authorization"));
User.findOne({
email: email
}).then((user) => res.status(200).send({
friends: user.friends
}));
通过代码,可以用
完成User.findOne({ email: email }).then((user) => {
const friends = user.friends.filter((f) => f.approved);
res.status(200).send({ friends });
});
或者您可以改用查询
User.agregate([
{
$match: {
email: "[email protected]",
},
},
{
$project: {
_id: 1,
friends: {
$filter: {
input: "$friends",
as: "truelyFriend",
cond: {
$eq: ["$$truelyFriend.approved", true],
},
},
},
},
},
]).then((user) => {
res.status(200).send({ friends: user[0].friends });
});
mongo 测试器:mongo-playground