【问题标题】:Adding new key/values to object not saved after mongo query returned向 mongo 查询返回后未保存的对象添加新键/值
【发布时间】:2021-06-27 20:39:47
【问题描述】:

我有一个功能需要执行两组查询,一组用于获取设施信息,另一组用于获取有关该设施用户的信息。 完成两个查询后,我将设施信息以及附加到每个用户记录的用户信息发送到前端。

问题: 附加信息未按预期保存。

代码:


app.get(
  async (req, res) => {
    const facilityInfo = await Facility.findOne({ admins: req.user.username })
    for (let i = 0; i < facilityInfo.memberships.length; i++){
      facilityInfo.memberships[i].info = await User.findOne({username: facilityInfo.memberships[i].username})
    }
    console.log(facilityInfo)
    res.status(200).send(facilityInfo);
  }
);

日志语句永远不会返回在第二个查询中检索到的信息,除非我专门记录了 facilityInfo.memberships[0].info,此时它确实如此。最初在文档中时,'info' 键不会本机返回,它仅在第二个查询执行时创建。

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    您正在从数据库中查找记录,您在代码中更新了这些记录,但您没有将更新后的记录发送到数据库。

    app.get(
        async (req, res) => {
            const facilityInfo = await Facility.findOne({ admins: req.user.username })
            for (let i = 0; i < facilityInfo.memberships.length; i++) {
                facilityInfo.memberships[i].info = await User.findOne({ username: facilityInfo.memberships[i].username })
            }
            // Update the data
            await facilityInfo.save();
            
            console.log(facilityInfo)
            res.status(200).send(facilityInfo);
        }
    );
    

    【讨论】:

    • 我不是要保存数据,而是将数据附加在一起。诚然,这是两个集合之间的关系查询,我意识到这对于 noSQL 数据库来说并不是很好。如果我记录facilityInfo.memberships,我不会得到任何返回的详细信息,如果我记录facilityInfo[i].memberships.info,它会正确附加。我的解决方法是使用 lodash merge()。
    猜你喜欢
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2018-09-14
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多