【问题标题】:Looping over objects to add property not working (Javascript with Mongodb)循环对象以添加属性不起作用(使用 Mongodb 的 Javascript)
【发布时间】:2021-11-12 22:20:35
【问题描述】:

我想获取所有用户的列表,将列表与调查数据库进行比较,以查看每个用户收到了多少票,并将这些投票值附加到用户对象,然后发送回前面。

我读过这样的例子: 'TypeError: meme.find(...).forEach is not a function' in mongoose node js? 和这个: Adding Properties in a forEach Loop in Mongoose

我正在尝试做同样的事情。

我有简单的代码,但它不起作用。

尝试 #1

let users = await User.find({teams: {$in: req.user.team_oid}}, {_id: 1, firstname: 1, lastname: 1})

users.forEach(async(user, i) => {

    let nomineeCount = await Survey.countDocuments({_id: mongoose.Types.ObjectId(req.params.s_oid), 'facilitators.nominee': mongoose.Types.ObjectId(user._id) })

    user["votes"] = nomineeCount;

    if(i+1 === users.length) {res.json({users: users})}
})

除了user 没有收到["votes"] 属性之外,查询和一切都正常工作。

尝试 #2

let users = await User.find({teams: {$in: req.user.team_oid}}, {_id: 1, firstname: 1, lastname: 1})

let nominees = users;

users.map( async (user, i) => {

let nomineeCount = await Survey.countDocuments({_id: mongoose.Types.ObjectId(req.params.s_oid), 'facilitators.nominee': mongoose.Types.ObjectId(user._id) })

    nominees[i].votes = nomineeCount;
        
    if(i+1 === nominees.length) {res.json({users: nominees})}
})

这也无法附加.votes 属性。

任何想法/建议表示赞赏。

【问题讨论】:

  • 能否提供样本数据
  • 这很简单。 users 是:[{_id: ObjectId, firstname: string, lastname: string }],对于 nomineeCount,它返回 Number
  • 这里的问题是异步forEach函数导致所有函数调用同时运行;你会想要使用 Promise.all 或 for 循环,所以当 res.json() 被调用时,它们的异步调用实际上已经全部完成。

标签: javascript mongodb object foreach


【解决方案1】:

你可以试试for await

for await (variable of iterable) { statement }

【讨论】:

    猜你喜欢
    • 2016-12-28
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2016-01-19
    相关资源
    最近更新 更多