猫鼬嵌套查询

Posted

技术标签:

【中文标题】猫鼬嵌套查询【英文标题】:Mongoose nested query 【发布时间】:2021-03-23 19:33:35 【问题描述】:

联系人模型有一个用户 ID 和一个嵌套文档作为联系人

Contact.findOne(userId : req.userData.userId).exec().then( doc =>
    console.log(doc);
    res.status(200).json(doc)
).catch(err => 
    console.log(err);
    res.status(500).json(error : err)
)

而这段代码输出是这样的:


"doc": 
    "_id": "5fd4c77508f14a1e108c8788",
    "userId": "5fd4c77508f14a1e108c8787",
    "contacts": [
        
            "_id": "5fd4e9cc08f14a1e108c8789",
            "name": "muaz",
            "number": 123415123,
            "contactImage": "uploads\\2020-12-12T16-03-24.588Zqweqqq.png"
        ,
        
            "_id": "5fd4ea102502ab1130549bbb",
            "name": "muazs",
            "number": 123415123,
            "contactImage": "uploads\\2020-12-12T16-04-32.561Zqweqqq.png"
        ]

我从请求 (req.params.userId) 中获得了一个联系人 ID。

例如:当我收到 req.param.userId = 5fd4e9cc08f14a1e108c8789

的请求时

我想发送这样的回复:


        "_id": "5fd4e9cc08f14a1e108c8789",
        "name": "muaz",
        "number": 123415123,
        "contactImage": "uploads\\2020-12-12T16-03-24.588Zqweqqq.png"
    

如何通过模型查找方法获得此联系?

【问题讨论】:

我不明白带有 id 的部分,所以你的请求和数据库条目中都有一个 id ? 最有日期的问题在这里***.com/questions/65267374/mongoose-nested-query 【参考方案1】:
const userId=req.params;

Contact.findOne("contacts._id":userId, contacts:$elemMatch:_id:userId)
.then(data=>res.send(data.contacts[0]))
.catch(err=>res.send("Not found!"))

这将仅返回基于存储为 _id 的 userId 匹配的用户详细信息,这正是您想要的。

【讨论】:

以上是关于猫鼬嵌套查询的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬查询中的嵌套选择

我目前有一个问题,我试图在 grapql 中查询嵌套的猫鼬对象,但似乎无法弄清楚

猫鼬嵌套文档返回未定义

猫鼬嵌套查找不起作用[重复]

如何通过猫鼬中的嵌套属性查找

嵌套模式/子文档对象中的猫鼬 findById() - 聚合